2017-08-21 72 views
4

我注意到没有 format指令,将 呼叫force-output/finish-output呼叫结束输出从格式

为什么?

它似乎是在用户交互是有用的,比照 Lisp format and force-output

例如,~=可以翻译成finish-output~:=force-output。 我不认为clear-output在这方面很有意义,但我们 可能会映射[email protected]=以完整性。

PS。参看CLISP RFE。从comp.lang.lisp

+0

清除输入也许可以是具有双向流有用吗? – coredump

回答

2

摘要:

从史蒂芬Haflich

语言的解释定义没有可移植的方法来扩展格式的设定 指令(其他然后~/.../),但在这里,这不是真正的问题。 真正的问题是,在打印过程中没有明确定义在任意位置调用finish-output或类似的功能。

如果漂亮的印刷过程中,由 pprint-dispatchprint-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在上面的例子)