問題のコードがこれ
(defun read-with-prompt () (princ "> ") (read))
CLISPではきちんと動く。
[1]> (read-with-prompt) > hoge hoge
SBCLではこうなる。
* (read-with-prompt) hoge > hoge
princよりも先にreadが実行されてしまう。
この問題は、SBCLの最適化が原因らしい。
(finish-output)
で出力の終了を明記するとうまく動く。
修正後のコード
(defun read-with-prompt () (princ "> ") (finish-output) (read))
下記のコードを書いている時にこの問題を発見した。