ЧТЕНИЕ запускается перед ФОРМАТИРОВАНИЕМ

Запустил это в SLIME и задался вопросом, почему он ожидает ввода read перед выводом 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

person deadghost    schedule 23.11.2013    source источник
comment


Ответы (1)


Это происходит потому, что стандартный поток вывода буферизован, а это означает, что то, что в него печатается, на самом деле не сразу выводится на дисплей. Вам нужно вызывать (finish-output) перед (read) в каждом экземпляре, чтобы гарантировать, что все, что было буферизовано, будет записано первым.

person Chris Jester-Young    schedule 23.11.2013