LISP: (формат) печатает только после успешного (чтение) - PullRequest
1 голос
/ 14 февраля 2012

Я просматриваю книгу ANSI Common Lisp Пола Грэма, и вот такой пример:

(defun ask-number ()
  (format t "Please enter a number. ")
  (let ((val (read)))
       (if (numberp val)
           val
           (ask-number))))

Он должен вести себя так:


$ (ask-номер)

Пожалуйста, введите номер. a

Пожалуйста, введите номер. (хо гул)

Пожалуйста, введите номер. 52

52


Но когда я пытаюсь это сделать (SBCL 1.0.55), он не печатает строку format , покауспешно прочитано :


$ (номер запроса)

a

(хо гул)

52

Пожалуйста, введите номер.Пожалуйста, введите номер.Пожалуйста, введите номер.

52


Где ошибка?Как заставить его вести себя намеченным образом?

1 Ответ

7 голосов
/ 14 февраля 2012

Это часто задаваемый вопрос.Возможно, в Stackoverflow есть его дубликаты.

Вывод может быть буферизован.

Затем вам нужно вызвать стандартную функцию Common Lisp FINISH-OUTPUT, чтобы заставить систему ввода-вывода записать любой ожидающий вывод.

После этого читать.

...