SBCL Переключает порядок печати и чтения (лисп)

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

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

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

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


person DJM    schedule 02.12.2011    source источник


Ответы (1)


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

person Vsevolod Dyomkin    schedule 02.12.2011