% Function UNREAD-CHAR
Function UNREAD-CHAR
unread-char character &optional input-stream => nil
character - 文字。
input-streamから読み込んだ最後の文字でなければなりません。
input-stream - 入力ストリーム指定子。デフォルトは標準入力。
unread-charは、characterをinput-streamの前に戻し、
ふたたびinput-streamの次の文字になるようにします。
input-streamがechoストリームのとき、
input-stream上ですでに実施された文字のエコーの取り消しは行いません。
しかしunread-charによるinput-stream上で置き換えられた文字は、
あとでread-charによって再びエコーされ内容にするために
印がつけられます。
同じストリームに対してunread-charを二度続けて、
read-char(または暗黙的に文字の読み込みを行う他の入力操作)を
介入させることなく実行したときはエラーです。
peek-charかread-charの呼び出しは、前の文字を渡します。
peek-charによって返却されたものの前のどんな文字について
unread-charを実行した結果は指定されていません
(peek-charのpeek-typeがnilでは
なかったときに渡された場合を含む)。
とくに、peek-charのあとのunread-charの
呼び出しの結果は指定されていません。
(with-input-from-string (is "0123")
(dotimes (i 6)
(let ((c (read-char is)))
(if (evenp i) (format t "~&~S ~S~%" i c) (unread-char c is)))))
>> 0 #\0
>> 2 #\1
>> 4 #\2
=> NIL
*standard-input*,
*terminal-io*
なし。
peek-char,
read-char,
21.1. ストリームの説明
unread-charは、
Lispリーダーやその他の構文解析を実行するときに
input-streamからひとつの文字を先読みできるような
効率的な仕組みの提供を目的としています。