什么格式实际打印在Common Lisp中?

Pau*_*ers 6 format common-lisp

我有以下Common Lisp代码:

(defun micro-read-eval-print ()
    (format t "Micro > ")
    (let ((form (read-line)))))
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下内容:

CL-USER> (micro-read-eval-print)
(m-quote a)
Micro > NIL
Run Code Online (Sandbox Code Playgroud)

请注意,我输入"(m-quote a)",而Lisp解释器输出"Micro> NIL".

现在,我希望这些事件以相反的顺序发生.自格式声明出现以来,我本来期望首先打印"Micro>".为什么不先打印?我需要做些什么才能确保先打印?

Hea*_*utt 11

尝试添加

(defun micro-read-eval-print ()
    (format t "Micro > ")
    (finish-output)
    (let ((form (read-line)))))
Run Code Online (Sandbox Code Playgroud)

我相信你正在遇到标准io(stdio)的缓冲,在C语言中,它通常被fflush()用这种语言绕过.

finish-output似乎是C标准库的Common Lisp等价物fflush.

  • 是的,实现可以使用缓冲的IO流,并且不需要在格式之后或读取之前强制输出.因此,对于便携式代码,必须调用强制输出或完成输出之类的东西. (4认同)