Function READ-CHAR-NO-HANG
read-char-no-hang &optional input-stream eof-error-p eof-value recursive-p => char
input-stream - 入力ストリーム指定子。デフォルトは標準入力。
eof-error-p - generalized-boolean。デフォルトはtrue。
eof-value - オブジェクト。デフォルトはnil。
recursive-p - generalized-boolean。デフォルトはfalse。
char - 文字か、eof-value
read-char-no-hangは、 input-streamに利用可能な文字があるとき、 その文字を返却します。 もし文字が利用可能ではないとき、 read-char-no-hangはnilを返却します。
もしrecursive-pがtrueのとき、 この呼び出しはより上位レベルのreadによるものか、 Lispのリーダーによって使われる似たような関数から 埋め込まれたものであると見なされます。
もしファイルの終わりが発生し、 eof-error-pがfalseであるときは、 eof-valueが返却されます。
;; このコードは実装がコンソールからの入力の終端に
;; 改行を必要としないことを仮定しています。
(defun test-it ()
(unread-char (read-char))
(list (read-char-no-hang)
(read-char-no-hang)
(read-char-no-hang)))
=> TEST-IT
;; 実装Aは、コンソールのインタラクティブな入力の終端に
;; 改行を必要としません。
(test-it)
>> a
=> (#\a NIL NIL)
;; 実装Bは、コンソールのインタラクティブな入力の終端に
;; 改行を必要とし、その開業は入力ストリームに残します。
(test-it)
>> a<NEWLINE>
=> (#\a #\Newline NIL)*standard-input*, *terminal-io*
eof-error-pがtrueでありファイルの終わりに到達したときは、 型end-of-fileのエラーが通知されます。
read-char-no-hangは正確にread-charと似ていますが、 もし文字を(例えばキーボードから)取得するために 待機する必要があるような場合は違っており、 このような場合は待つことなしに即座にnilを返却します。