Go to the first, previous, next, last section, table of contents.

入力ストリーム

入力ストリームを取る関数のアーギュメントは、以下のオブジェクトのいずれかです。

buffer

      (文字を読み込むと先に進められる)ポイントの直後の文字を最初の文字とし
      て、 buffer から(入力)文字を読み込みます。

marker

      (文字を読み込むと先に進められる)マーカーの直後の文字を最初の文字とし
      て、( marker がその中にある) buffer から(入力)文字を読み込みます。

function

      入力文字は、(1回の呼び出しに対し 1文字のペースで) function で生成され
      ます。

string

      ストリングの最初の文字から始め、必要な文字だけ進めることで、 string か
      ら(入力)文字を取ります。

t

      t をストリームとして用いることは、 (ユーザーが)ミニバッファに入力する
      と、その入力文字を読み込むことを意味します。

nil

      nil をストリームとして用いることは、 standard-input の値を(代りに)用い
      ることを意味します (この値は nil でない入力ストリームでなくてはいけま
      せん)。

次の例において、バッファ foo 中のポイントは最初のスペースと文字 `i' の間に位置 付けられています。 read はこれを word(訳注:語) `is' の後ろに進めます。これは また、スペースを読み込み無視します。次に read を呼ぶと、word `the' を読み込み 2番目のスペースのすぐ後にポイントを位置付けます。

      ---------- Buffer: foo ----------
      This is the contents of foo.
      ---------- Buffer: foo ----------
      (read (get-buffer "foo"))
      => is
      (read (get-buffer "foo"))
      => the

次の例において、マーカー m は、(この)バッファの先頭に設定されています。 read は最初の word `This' をシンボルとして読み込み、マーカーを (最初のスペースを越 え) 先に動かします。

      ---------- Buffer: foo ----------
      This is the contents of foo.
      ---------- Buffer: foo ----------
      (setq m (set-marker (make-marker) 1 (get-buffer "foo")))
      => #<marker at 1 in foo>
      (read m)
      => This
      m
      => #<marker at 6 in foo>

次の例では、 (リストを作る) ストリングの最初の 9文字を読み込みます。

      (read "(When in) the course")
      => (When in)

(ミニバッファから読み込む) 次の例において、Lisp はプロンプト Lisp expression: を表示し、ユーザーは (RET でターミネートされた) 数字 23 をタイプしています。

      (read t)
      => 23
      ---------- Buffer: Minibuffer ----------
      Lisp expression: RET

以下の例において、変数 useless-stream は文字のリストに初期化されています。関数 useless-stream は呼ばれるたびにこのリストの(次の) 文字を生成します。 2回目の read の呼び出しにおいて、エラーが出されている点に注意しておく必要があります。 これは read は (すでに読み込まれてしまっている) 次の S-式の部分の文字を "unread" しないためです(最初の例としては良くない!!)。

read は最初の read 形式で useless-stream を 3 回呼んでいます。 3 番目の文字 `(' が読まれると、これは (XY) と形作られたシンボルをターミネートして忘れられま す。このため、次の read は ( `(' がないと無効である) 文字 `)' で始まっていま す。

      (setq useless-list '(?X ?Y ?( ?)))
      => (88 89 40 41)
      (defun useless-stream ()
        (prog1 (car useless-list)
               (setq useless-list (cdr useless-list))))
      =>useless-stream
      (read 'useless-stream)
      => XY
      (read 'useless-stream))
      --> ERROR: unbalanced parentheses

Go to the first, previous, next, last section, table of contents.