Lisp/SBCLでprintとreadの実行順序が逆になる場合の対処
症状†
SBCLで、printの後にreadが呼ばれるように書いても、printより先にreadが呼ばれることがある。バグか仕様かわからないけど。
具体的には以下のようなもの。
> (defun echo ()
(print 'first) ; まずprintしてから
(setf x (read)) ; 入力後に
(print x) ) ; 表示してほしい
> (echo)
; 'FIRST' がprintされる前にreadの待機状態になる
second ; 'second' を入力
FIRST ; 'FIRST' がprint
SECOND ; 'SECOND' がprint(setfのeval結果)
SECOND ; 'SECOND' がprint(printのeval結果)
対処†
- readの前のprintを、prin1とterpriに置き換える。
> (defun echo ()
(prin1 'first) ; まずprin1する
(terpri) ; 改行コードを出力
(setf x (read))
(print x) )
> (echo)
FIRST ; 'FIRST' がprintされた
second ; 'second' を入力
SECOND ; eval結果
SECOND
参考にしたサイト†
ブログ側のエントリ†
Last-modified: 2026-05-10 (日) 23:17:19