Next: , Previous: , Up: Lispオブジェクトの読み取りとプリント   [Contents][Index]


20.3 入力関数

このセクションでは、読み取りに関係のあるLisp関数と変数について説明します。

以下の関数ではstreamは入力ストリーム(前のセクションを参照)を意味します。streamnilまたは省略された場合のデフォルト値はstandard-inputです。

読み取りにおいて終端されていないリスト、ベクター、文字列に遭遇したらend-of-fileがシグナルされます。

Function: read &optional stream

この関数はstreamからテキスト表現されたLisp式を1つ読み取って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)
Function: read-positioning-symbols &optional stream

この関数はreadが行うようにstreamからテキストとして1つの式を読み取るが、読み込んだシンボルにたいしてそのシンボルがstreamで出現した位置を読み込んだシンボルに付加する。効率上の理由によりシンボルnilだけは位置を付加しない。位置をもつシンボルを参照のこと。これはバイトコンパイラーによって使用される関数である。

Variable: standard-input

この変数はデフォルト入力ストリーム(引数streamnilのときにreadが使用するストリーム)を保持する。デフォルトはtで、これはミニバッファーを使用することを意味する。

Variable: read-circle

nilなら、この変数は循環構造(circular structure)と共有構造(shared structures)の読み取りを有効にする。循環オブジェクトの読み取り構文を参照のこと。デフォルト値はt

batchモードのEmacsプロセスの標準入力や標準出力のストリームにたいして読み取りや書き込みを行う際には、任意のバイナリーデータにたいしてそのまま読み取りや書き込みを行うことや、改行とCR-LFの変換を何も行わないことを保証することが要求される場合があります。この問題はMS-WindowsとMS-DOSだけに存在する問題であり、POSIXではそのような問題はありません。以下の関数によりEmacsプロセスのすべての標準ストリームのI/Oモードを制御することができます。

Function: set-binary-mode stream mode

streamのI/Oモードのバイナリーとテキストを切り替える。modeが非nilならバイナリーモード、それ以外ならテキストモードに切り替える。streamの値はstdinstdoutstderrのいずれか。この関数は副作用としてstreamの保留中の出力データをすべてフラッシュして、streamの以前のI/Oモードの値をリターンする。POSIXでは常に非nil値をリターンして、保留中の出力のフラッシュ以外は何も行わない。

Function: readablep object

この述語はobject読み取り可能構文(readable syntax)かどうか、つまり書き込んでからEmacs Lispリーダーによって読み戻せるかどうかを判定する。読み取り可能でなければnil、読み取り可能であればこの関数はobjectのプリント表現をリターンする(prin1を通じて; 出力関数を参照)。