1

私は、Paul Graham のANSI Common Lispという本を読んでいます。次の例があります。

(defun ask-number ()
  (format t "Please enter a number. ")
  (let ((val (read)))
       (if (numberp val)
           val
           (ask-number))))

次のように動作する必要があります。


$ (質問番号)

番号を入力してください。a

番号を入力してください。(ホ ハム)

番号を入力してください。52

52


しかし、試してみると(SBCL 1.0.55)、読み取りが成功するまでフォーマット文字列が出力されません:


$ (質問番号)

a

(ホ ハム)

52

番号を入力してください。番号を入力してください。番号を入力してください。

52


エラーはどこにありますか?意図したとおりに動作させるにはどうすればよいですか?

4

1 に答える 1

8

これはよくある質問です。Stackoverflow でこれと重複している可能性があります。

出力はバッファリングできます。

次に、標準の Common Lisp 関数を呼び出してFINISH-OUTPUT、IO システムに保留中の出力を強制的に書き込む必要があります。

その後、読んでください。

于 2012-02-14T12:20:49.413 に答える