Function READ-SEQUENCE

UP


Function READ-SEQUENCE

Function READ-SEQUENCE

構文

read-sequence sequence stream &key start end => position

引数と戻り値

sequence - シーケンス
stream - 入力ストリーム
start, end - stringの境界インデックス指定子。 デフォルトはstart, endそれぞれ0nil
position - 0以上かつsequenceの長さ以下の整数

定義

streamから要素を読み込み、 sequencestartから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)

副作用

streamsequenceは修正されます。

影響

なし。

例外

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に 格納していく繰り返しと同じ効果ですが、 おそらくは同等のループよりもより効率的になります。

ある効率の良い実装では、 sequencestreamの要素と同じ型のvectorである場合に より効率的になるかもしれません。


TOP, Github