READ 在 FORMAT 之前运行

dea*_*ost 1 lisp sbcl common-lisp slime

read在 SLIME 中运行这个并想知道为什么它在输出之前等待输入format

(defun wage ()
  (format t "~&Enter wage: ")
  (let ((wage (read)))
    (format t "~&Enter hours: ")
    (let ((hours (read)))
      (format t "~&Earned ~S dollars." (* wage hours)))))

* (wage)

2
Enter wage: 
3
Enter hours: 
Earned 6 dollars.
NIL
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 6

发生这种情况是因为标准输出流是缓冲的,这意味着打印到标准输出流的内容实际上不会立即写入显示。您需要在每个实例中调用(finish-output)before(read)以确保首先写入已缓冲的任何内容。