从格式调用完成输出



我注意到没有format指令,这将 呼叫force-output/finish-output

为什么?

它似乎在用户交互中很有用,参见。 Lisp 格式和强制输出。

例如,~=可以翻译成finish-output~:=可以翻译成force-output。 我认为在这种情况下clear-output没有多大意义,但我们 可能会将~@=映射到它以确保完整性。

参看《联邦法律自由条例》。

comp.lang.lisp 的摘要:

史蒂文·哈夫利希的解释

该语言没有定义扩展格式集的可移植方法 指令(除了~/.../之外(,但这不是这里真正的问题。 真正的问题是,在打印过程中,没有很好地定义在任意位置调用finish-output或类似函数。

如果正在进行漂亮打印,则由pprint-dispatchprint-object方法可能是封装流 -- 一种暂时延迟输出,直到它可以做出以下决策 空格和换行符。 (如果finish-output是在~<理由内调用的,但该指令 是一个毛球! 如果被召唤,人们会期望finish-output做什么 在一个漂亮的打印操作中? 我认为它的定义并不明确。

当然,问题不在于格式,而在于 格式finish-output只会给 语言。finish-output等只有在完全安全的情况下才能安全调用 在实际或暗示的cl:write调用之外。 将其作为函数调用 在代码中的适当位置(您知道执行不是 在嵌套写入中(所以意图很明确,你不会搞砸 打印机内部。

罗伯·沃诺克的建议

实际上,不需要对format进行任何更改。只需在 COMMON-LISP-USER 包中的某个位置添加此函数:

(defun fo (stream arg colon-p atsign-p &rest params)
(declare (ignore arg params))
(cond
(colon-p (force-output stream))
(atsign-p (clear-output stream))
(t (finish-output stream))))

然后:

(progn
(format t "enter var: ~/fo/" nil)
(read))
enter var: 456
456 

这种(可移植的!(方法的问题是

  • 详细程度(~/fo/而不是~=(
  • 需要使用格式参数(nil在上面的示例中(

相关内容

  • 没有找到相关文章

最新更新