Next: , Previous: , Up: Read and Print   [Contents][Index]


18.4 Output Streams

出力ストリームは、プリントにより生成された文字に何を行うかを指定します。ほとんどのプリント関数は、オプション引数として出力ストリームを受け入れます。以下は利用できる出力ストリーム型です:

buffer

出力文字は、bufferのポイント位置に挿入される。文字が挿入された分、ポイントが進む。

marker

出力文字は、markerのあるバッファーのマーカー位置に挿入される。文字が挿入された分、マーカー位置が進む。ストリームがマーカーのときは、そのバッファー内のポイント位置にプリントは影響せず、この種のプリントでポイントは移動しない(マーカー位置がポイント位置、またはポイント位置より前の場合は除外される。通常はテキストの周囲にポイントが進む)。

function

出力文字は、文字を格納する役目をもつfunctionに渡される。この関数は1つの文字を引数に、出力される文字の回数呼び出され、その文字を格納したい場所に格納する役目をもつ。

t

出力文字はエコーエリアに表示される。

nil

出力ストリームにnilが指定された場合は、かわりにstandard-outputの値が使用されることを意味する。この値はデフォルトの出力ストリーム(default output stream)であり、非nilでなければならない。

symbol

出力ストリームとしてのシンボルは、(もしあれば)そのシンボルの関数定義と等価である。

有効な出力ストリームの多くは、入力ストリームとしても有効です。したがって入力ストリームと出力ストリームの違いは、Lispオブジェクトの型ではなく、どのようにLispオブジェクトを使うかという点です。

以下はバッファーを出力ストリームとして使用する例です。ポイントは最初は‘the’の中の‘h’の直前にあります。そして最後も、同じ‘h’の直前に配されます。

---------- Buffer: foo ----------
This is t∗he contents of foo.
---------- Buffer: foo ----------

(print "This is the output" (get-buffer "foo"))
     ⇒ "This is the output"

---------- Buffer: foo ----------
This is t
"This is the output"
∗he contents of foo.
---------- Buffer: foo ----------

次はマーカーを出力ストリームとして使用する例です。マーカーは最初、バッファーfoo内の単語‘the’の中の‘t’と‘h’の間にあります。最後には、挿入されたテキストによりマーカーが進み、同じ‘h’の前に留まります。通常の方法で見られるようなポイント位置への影響がないことに注意してください。

---------- Buffer: foo ----------
This is the ∗output
---------- Buffer: foo ----------

(setq m (copy-marker 10))
     ⇒ #<marker at 10 in foo>

(print "More output for foo." m)
     ⇒ "More output for foo."

---------- Buffer: foo ----------
This is t
"More output for foo."
he ∗output
---------- Buffer: foo ----------

m
     ⇒ #<marker at 34 in foo>

以下はエコーエリアに出力を表示する例です:

(print "Echo Area output" t)
     ⇒ "Echo Area output"
---------- Echo Area ----------
"Echo Area output"
---------- Echo Area ----------

最後は関数を出力ストリームとして使用する例です。関数eat-outputは与えられたそれぞれの文字をlast-outputの先頭にconsします(Building Listsを参照)。最後には、リストには出力されたすべての文字が逆順で含まれます。

(setq last-output nil)
     ⇒ nil

(defun eat-output (c)
  (setq last-output (cons c last-output)))
     ⇒ eat-output

(print "This is the output" 'eat-output)
     ⇒ "This is the output"

last-output
     ⇒ (10 34 116 117 112 116 117 111 32 101 104
    116 32 115 105 32 115 105 104 84 34 10)

このリストを逆転すれば、正しい順序で出力することができます:

(concat (nreverse last-output))
     ⇒ "
\"This is the output\"
"

concatを呼び出してリストを文字列に変換すれば、内容をより明解に確認できます。


Next: , Previous: , Up: Read and Print   [Contents][Index]