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