本節では、読み込みに関連するLispの関数と変数について説明します。
以下の関数において、stream は入力ストリームを表します(前節を参照)。stream が nil
であるか、あるいは省略されている場合は、デフォルトで standard-input の値となります。
読み込み時に終端していないリスト、ベクトル、または文字列が検出された場合、end-of-file
エラーが報告されます。
この関数は、stream から Lisp のテキスト式を 1 つ読み込み、それを Lisp オブジェクトとして返します。これが基本的な Lisp 入力関数です。
この関数は、string 内のテキストから最初のテキスト形式の Lisp 式を読み込みます。CAR にその式を、CDR に文字列内で次に残っている文字(すなわち、まだ読み込まれていない最初の文字)の位置を示す整数を持つ cons セルを返します。
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 starting at the first character.
(read-from-string "(list 112)" 0)
⇒ ((list 112) . 10)
;; Read starting at the second character.
(read-from-string "(list 112)" 1)
⇒ (list . 5)
;; Read starting at the seventh character, ;; and stopping at the ninth. (read-from-string "(list 112)" 6 8) ⇒ (11 . 8)
この関数は、readと同様にstreamから1つのテキスト式を読み込みますが、さらに、読み込んだシンボルをstream内でそれらが出現した位置に配置します。効率上の理由から、シンボルnilだけは配置されません。位置付きシンボルを参照してください。この関数はバイトコンパイラで使用されます。
この変数にはデフォルトの入力ストリーム――stream 引数が nil の場合に read
が使用するストリーム――が格納されています。デフォルトは t
で、これはミニバッファを使用することを意味します。
nil 以外の場合、この変数により循環構造および共有構造の読み取りが可能になります。循環オブジェクトの読み取り構文を参照してください。デフォルト値は t です。
バッチモードでEmacsプロセスの標準入出力ストリームから読み書きを行う際、任意のバイナリデータがそのまま読み書きされること、および/または改行のCR-LFペアへの変換やそこからの変換が行われないことを確実にする必要がある場合があります。この問題はPOSIXホストでは発生せず、MS-WindowsおよびMS-DOSでのみ発生します。以下の関数を使用すると、Emacsプロセスの任意の標準ストリームのI/Oモードを制御できます。
stream をバイナリ I/O モードまたはテキスト I/O モードに切り替えます。mode が nil
以外の場合はバイナリモードに、それ以外の場合はテキストモードに切り替えます。stream
の値は、stdin、stdout、または
stderr のいずれかとなります。この関数は、副作用として stream の保留中の出力データをフラッシュし、stream
の直前の I/O モードの値を返します。POSIX ホストでは、常に nil
以外の値を返し、保留中の出力をフラッシュする以外の処理は行いません。