2010-08-06 75 views
6

我有以下的Common Lisp代碼:什麼時候格式實際上在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-報價一​​)」,而Lisp解釋器輸出「Micro> NIL」。

現在,我會預料這些事件會以相反的順序發生。自格式化語句首先打印出來以後,我預計會先打印出「Micro>」。爲什麼不先打印?我需要做些什麼才能確保它首先被打印?

回答

11

嘗試增加

(defun micro-read-eval-print() 
    (format t "Micro > ") 
    (finish-output) 
    (let ((form (read-line))))) 

我相信你遇到它,在C,通常通過fflush()在語言繞過標準IO(標準輸入輸出)的緩衝。

finish-output似乎是C標準庫的fflush的Common Lisp等價物。

+4

對,實現可能使用緩衝的IO流,不需要在格式化之後或讀取之前強制輸出。因此,對於便攜式代碼,必須調用類似於強制輸出或完成輸出的內容。 – 2010-08-06 18:00:41

相關問題