Function READ-SEQUENCE
read-sequence
sequence stream &key
start end => position
sequence - シーケンス
stream - 入力ストリーム
start, end - stringの境界インデックス指定子。 デフォルトはstart, endそれぞれ0
とnil
。
position - 0
以上かつsequenceの長さ以下の整数
streamから要素を読み込み、 sequenceのstartからendの境界内の要素を 破壊的に修正して置き換えます。
sequenceは破壊的に修正され、streamから一連の要素がコピーされます。 もし部分シーケンスの全ての要素をコピーする前に streamがファイルの終わりに到達したとき、 sequenceの終端付近の残りの要素は更新されません。
positionは、更新が生じなかったsequenceの 最初の要素のインデックスであり、 ファイルの終わりに到達したときはend未満になることがあります。
defvar *data* (make-array 15 :initial-element nil))
(values (read-sequence *data* (make-string-input-stream "test string")) *data*)
(=> 11, #(#\t #\e #\s #\t #\Space #\s #\t #\r #\i #\n #\g NIL NIL NIL NIL)
streamとsequenceは修正されます。
なし。
sequenceが正常なシーケンスではなかったときは、 型type-error
のエラーを通知する準備をしなければなりません。 startが非負の整数ではなかったときは、 型type-error
のエラーを通知する準備をしなければなりません。 endが非負の整数かnil
ではなかったときは、 型type-error
のエラーを通知する準備をしなければなりません。
streamから読み込まれた要素が、 sequenceの要素の型ではなかったときは、 型type-error
のエラーを通知されるかもしれません。
3.2.1. コンパイラーの用語, write-sequence
, read-line
read-sequence
は、指定した部分シーケンスに対して streamからひとつの要素を読み込みその都度sequenceに 格納していく繰り返しと同じ効果ですが、 おそらくは同等のループよりもより効率的になります。
ある効率の良い実装では、 sequenceがstreamの要素と同じ型のvector
である場合に より効率的になるかもしれません。