我有以下Common Lisp代码:
(defun micro-read-eval-print ()
(format t "Micro > ")
(let ((form (read-line)))))
当我运行它时,我得到以下内容:
CL-USER> (micro-read-eval-print)
(m-quote a)
Micro > NIL
请注意,我输入“(m-quote a)”,而Lisp解释器输出“Micro> NIL”。
现在,我原本预计这些事件会以相反的顺序发生。自格式声明出现以来,我原本预计会先打印“Micro>”。为什么不先打印?我需要做些什么才能确保首先打印出来?
答案 0 :(得分:11)
尝试添加
(defun micro-read-eval-print ()
(format t "Micro > ")
(finish-output)
(let ((form (read-line)))))
我相信你正在遇到标准io(stdio)的缓冲,在C语言中,它通常通过该语言中的fflush()
被绕过。
finish-output
似乎是C标准库fflush
的Common Lisp等价物。