Next: , Previous: Input Streams, Up: Read and Print


18.3 入力関数

本節では読み取りに関係するLisp関数や変数について述べます。

以下の関数では、streamは入力ストリーム(前節参照)を表します。 streamnilであったり省略すると、 standard-inputの値をデフォルトにします。

読み取り中に閉じていないリストやベクトル、文字列に出会うと、 エラーend-of-fileを通知します。

— Function: read &optional stream

この関数はstreamから1つのLisp式のテキスト表現を読み取り、 それをLispオブジェクトとして返す。 これは基本的なLisp入力関数である。

— Function: read-from-string string &optional start end

この関数はstringのテキストから先頭のLisp式のテキスト表現を読み取る。 読み取った式をcar、文字列に残っているつぎの文字 (つまり読み取っていない最初の文字)の位置を表す整数をcdr とするコンスセルを返す。

startが指定してあると、文字列のstartで添字付け (先頭文字の添字は0)されるところから読み始める。 endを指定すると、その添字位置の直前で読み取りを終らせ、 文字列には残りの文字がないかのように扱う。

例:

          (read-from-string "(setq x 55) (setq y 5)")
                ((setq x 55) . 11)
          (read-from-string "\"A short string\"")
                ("A short string" . 16)
          
          
          ;; 最初の文字から読み始める
          (read-from-string "(list 112)" 0)
                ((list 112) . 10)
          
          ;; 2番目の文字から読み始める
          (read-from-string "(list 112)" 1)
                (list . 5)
          
          
          ;; 7番目の文字から読み始め、9番目の文字で読み終える
          (read-from-string "(list 112)" 6 8)
                (11 . 8)
— Variable: standard-input

この変数はデフォルトの入力ストリーム、 つまり、引数streamnilである場合にreadが使う ストリームを保持する。