【问题标题】:LISP: (format) prints only after successful (read)LISP:(格式)仅在成功(读取)后打印
【发布时间】:2012-03-05 19:16:57
【问题描述】:

我正在阅读 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)时,它不会打印 format 字符串,直到成功 read


$(问号)

一个

(哼哼)

52

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

52


哪里出错了?如何让它按照预期的方式运行?

【问题讨论】:

    标签: format lisp common-lisp bufferedoutputstream


    【解决方案1】:

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

    可以缓冲输出。

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

    然后,阅读。

    【讨论】:

    • 啊哈,缓冲!谢谢,在 (format ...) 行之后添加 (finish-output) 解决了这个问题。
    • 另外,您对重复项是正确的。我没有检查类似的问题-我的错。 stackoverflow.com/questions/3426312/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2020-09-18
    • 1970-01-01
    • 2014-06-27
    • 2016-10-28
    • 2011-03-26
    • 2020-12-03
    相关资源
    最近更新 更多