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

时间:2012-02-14 12:07:55

标签: format lisp 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))))

它的行为应该是这样的:


$(ask-number)

请输入一个号码。的

请输入一个号码。 (哼哼)

请输入一个号码。的 52

52


但是当我尝试它(SBCL 1.0.55)时,它不会打印格式字符串,直到成功读取


$(ask-number)

一个

(哼哼)

52

请输入一个号码。请输入一个号码。请输入一个号码。

52


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

1 个答案:

答案 0 :(得分:7)

这是一个经常被问到的问题。 Stackoverflow上可能存在重复的内容。

可以缓冲输出。

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

之后,请阅读。