Mar*_*zek 1 lisp format common-lisp bufferedoutputstream
我正在阅读Paul Graham 出版的ANSI Common Lisp一书,这是一个例子:
(defun ask-number ()
(format t "Please enter a number. ")
(let ((val (read)))
(if (numberp val)
val
(ask-number))))
Run Code Online (Sandbox Code Playgroud)
它应该像这样:
$(问号)
请输入一个号码.一个
请输入一个号码.(哼哼)
请输入一个号码.52
52
但是当我尝试它(SBCL 1.0.55)时,它在成功读取之前不会打印格式字符串:
$(问号)
一个
(哼哼)
52
请输入一个号码.请输入一个号码.请输入一个号码.
52
哪里出错?如何使其表现出预期的方式?
这是一个经常被问到的问题.Stackoverflow上可能有重复的内容.
输出可以缓冲.
然后,您需要调用标准的Common Lisp函数FINISH-OUTPUT
来强制IO系统写入任何挂起的输出.
之后,阅读.