% Macro WITH-INPUT-FROM-STRING
Macro WITH-INPUT-FROM-STRING
with-input-from-string
(
var string &key
index start end)
declaration* form*
=> result*
var - 変数名
string - フォーム。評価され文字列を生成します。
index - place
start, end - stringの境界インデックス指定子。
デフォルトはstart, endそれぞれ0
とnil
。
declaration - 宣言式。評価されません。
form - 暗黙のprogn
result - formの返却値
入力の文字列ストリームを作成し、 ストリーム上の操作を実行する機会を提供し (ゼロか複数の値を返却します)、 そして文字列ストリームをクローズします。
stringは最初に評価され、 結果の文字列をstartとendで囲った部分文字列から、 文字を提供する文字型の入力の文字列ストリームをvarに束縛します。
入力の文字列ストリームはwith-input-from-string
から
退出したときに通常時と非通常時に関わらず自動的にクローズされます。
変数varに束縛された入力の文字列ストリームは動的エクステントを持ち、
フォームから退出されたときにエクステントは終了します。
indexはstring内で前進したポインターです。
もしwith-input-from-string
が通常の退出をしたとき、
indexにはstringの最初に読まなくなった文字を示すインデックスの値を持っており
もし全ての文字が使用されたときは(length string)
になります。
indexによって指定されたplace
は
読み込み進行時だけではなく操作の終わりにも更新されます。
startとindexはおそらくどちらも同じ変数であり、 これはstring内の前進を行うポインターを示しており、 おそらくは何らかのループに含まれて繰り返されます。
変数varに代入しようとしたときの結果は未定義です。
(with-input-from-string (s "XXX1 2 3 4xxx"
:index ind
:start 3 :end 10)
(+ (read s) (read s) (read s))) => 6
ind => 9
(with-input-from-string (s "Animal Crackers" :index j :start 6)
(read s)) => CRACKERS
変数j
は15
が設定されます。
indexによって名前付けられたplace
の値は、
必要なら修正されます。
なし。
なし。
make-string-input-stream
,
3.6. 横断の規則と副作用
なし。