Когда формат на самом деле печатается в Common Lisp? - PullRequest
6 голосов
/ 06 августа 2010

У меня есть следующий 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>» будет напечатано первым, так как оператор форматирования стоит первым. Почему это не напечатано сначала? И что я должен сделать, чтобы удостовериться, что это напечатано сначала?

1 Ответ

11 голосов
/ 06 августа 2010

Попробуйте добавить

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

Я полагаю, вы сталкиваетесь с буферизацией стандартного io (stdio), которая в C обычно обходит через fflush() на этом языке.

finish-output похоже на Common Lisp, эквивалентный стандартной библиотеке C fflush.

...