LISP :(格式)仅在成功后打印(读取)

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


哪里出错?如何使其表现出预期的方式?

Rai*_*wig 7

这是一个经常被问到的问题.Stackoverflow上可能有重复的内容.

输出可以缓冲.

然后,您需要调用标准的Common Lisp函数FINISH-OUTPUT来强制IO系统写入任何挂起的输出.

之后,阅读.