6

私はまだ Lisp を学んでいるので、この問題に遭遇したときは混乱しました。最初に印刷してから入力を読み取りたい単純な関数があります。

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

したがって、これを CLISP で実行すると、期待どおりの結果が表示され、? が出力され、同じ行に read 関数への入力を書き込むことができました。

これを SBCL で実行すると、うまくいきませんでした。最初に入力を求めてから、? を出力します。改行を作成していないことが原因である可能性があると考えましたが、同じ行の SBCL でこれを機能させる方法を本当に知りたかったのです。また、CLISP での結果が正しく、SBCL での結果が正しくないのはなぜでしょうか。よろしくお願いいたします。

4

2 に答える 2

14

それは私にとって適切な順序で機能しますが、SBCL によって実行される出力バッファリングに関連している可能性があります。が呼び出される前に、印刷が終了することを保証するために(finish-output)afterを追加できます。princread

于 2011-12-02T18:23:56.820 に答える