1

我正在阅读Paul Graham的《 ANSI Common Lisp 》一书,有这个例子:

(defun ask-number ()
  (format t "Please enter a number. ")
  (let ((val (read)))
       (if (numberp val)
           val
           (ask-number))))

它的行为应该是这样的:


$(询问号码)

请输入一个数字。一种

请输入一个数字。(哼哼)

请输入一个数字。52

52


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


$(询问号码)

一种

(哼哼)

52

请输入一个数字。请输入一个数字。请输入一个数字。

52


错误在哪里?如何使其按预期方式运行?

4

1 回答 1

8

这是一个经常被问到的问题。Stackoverflow 上可能有这样的副本。

输出可以被缓冲。

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

之后,阅读。

于 2012-02-14T12:20:49.413 回答