SBCL Переключает порядок печати и чтения (lisp) - PullRequest
2 голосов
/ 02 декабря 2011

Я все еще учу шепот, поэтому, когда я столкнулся с этой проблемой, она смутила меня.У меня есть простая функция, где я хочу сначала распечатать, а затем прочитать ввод:

(defun ask()
   (princ '?)
   (read))

Итак, когда я запустил это с CLISP, он показал, что ожидалось, он напечатал?, А затем, нав той же строке я мог записать ввод для функции чтения.

Когда я запустил это с SBCL, все пошло не так.Сначала спрашивает меня, а затем печатает?Я подумал, что это может быть потому, что я не делаю перевод строки, но я действительно хотел знать, как я могу сделать эту работу в SBCL в той же строке.Кроме того, мне интересно, почему результат в CLISP правильный, а в SBCL - нет.Заранее благодарю за помощь.

1 Ответ

10 голосов
/ 02 декабря 2011

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

...