我注意到没有
这将是format
指令
致电force-output
/finish-output
。
为什么?
它似乎在用户交互中很有用,参见 Lisp format and force-output
例如,~=
可以转换为finish-output
,~:=
转换为force-output
。
在这种情况下,我不认为clear-output
有道理,但我们
为了完整性,可能会将~@=
映射到它。
PS。参看CLISP RFE
答案 0 :(得分:2)
该语言没有定义扩展格式集的可移植方式
指令(除了~/.../
之外),但这不是问题。
真正的问题是,在打印过程中在任意位置调用finish-output
或类似函数的定义不明确。
如果正在进行漂亮打印,则会收到一个流
pprint-dispatch
或print-object
方法可能是封装流 -
一个暂时延迟输出,直到它可以做出决定
白色空间和换行符。 (如果有的话也有潜在的问题
finish-output
在~<
理由中被调用,但该指令
是一个毛球!)如果被召唤,人们会期待finish-output
做什么
在一个漂亮的打印操作?我认为它没有明确定义。
当然,问题不是格式化,而是指令
来自格式的finish-output
只会为其添加另一个锐利边缘
语言。 finish-output
等只有完全可以安全通话
在cl:write
的实际或隐含电话之外。将其称为功能
在代码中的适当位置(您知道执行不是
在一个嵌套的写入内部)所以意图是明确的,你不要搞砸
打印机内部。
实际上,不需要对format
进行任何更改。只需在COMMON-LISP-USER package:
(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
)