Next: Output Variables, Previous: Output Streams, Up: Read and Print [Contents][Index]
このセクションでは、オブジェクトをオブジェクトのプリント表現に変換してLispオブジェクトをプリントするLisp関数を説明します。
Emacsプリント関数には、正しく読み取れるように必要なとき出力にクォート文字を追加するものがあります。使用されるクォート文字は‘"’と‘\’です。これらは文字列をシンボルと区別するとともに、文字列およびシンボル内の区切り文字が読み取り時に区切り文字として扱われることを防ぎます。完全な詳細はPrinted Representationを参照してください。クォートするかしないかは、プリント関数の選択により指定できます。
そのテキストがLispに読み戻す場合、同様にLispプログラマーにLispオブジェクトを明解に説明するのが目的の場合は、曖昧さを避けるためにクォート文字をプリントするべきです。しかし、プログラマー以外の人間にたいして出力の見栄えを良くするのが目的なら、通常はクォートなしでプリントしたほうがよいでしょう。
Lispオブジェクトは自己参照ができます。通常の方法で自己参照オブジェクトをプリントするにはテキストが無限に必要で、その試みにより無限再帰が発生する恐れがあります。Emacsはそのような再帰を検知して、すでにプリントされたオブジェクトを再帰的にプリントするかわりに、‘#level’をプリントします。たとえば以下は、カレントのプリント処理において、レベル0のオブジェクトを再帰的に参照することを示しています:
(setq foo (list nil))
⇒ (nil)
(setcar foo foo)
⇒ (#0)
以下の関数では、streamは出力ストリームを意味します。(出力ストリームの説明は、前のセクションを参照してください。)
streamがnil、または省略された場合のデフォルトは、standard-outputの値になります。
print関数は、プリントを行うための便利な方法である。この関数はobjectの前後に改行を付与して、objectのプリント表現をstreamにプリントする。クォート文字が使用される。printはobjectをリターンする。たとえば:
(progn (print 'The\ cat\ in)
(print "the hat")
(print " came back"))
-|
-| The\ cat\ in
-|
-| "the hat"
-|
-| " came back"
⇒ " came back"
この関数はobjectのプリント表現をstreamに出力する。この関数はprintのように出力を分割するための改行をプリントしないが、printのようにクォート文字を使用する。objectをリターンする。
(progn (prin1 'The\ cat\ in)
(prin1 "the hat")
(prin1 " came back"))
-| The\ cat\ in"the hat"" came back"
⇒ " came back"
この関数はobjectのプリント表現をstreamに出力する。objectをリターンする。
この関数はreadではなく人間が読める出力を生成することを意図しているので、クォート文字を挿入せず、文字列のコンテンツの前後にダブルクォート文字を配さない。呼び出しの間に間隔を何も出力しない。
(progn
(princ 'The\ cat)
(princ " in the \"hat\""))
-| The cat in the "hat"
⇒ " in the \"hat\""
この関数はstreamに改行を出力する。名前の由来は、“terminate print”である。
この関数はcharacterをstreamに出力する。characterをリターンする。
この関数は、同じ引数でprin1がプリントするテキストを含む文字列をリターンする。
(prin1-to-string 'foo)
⇒ "foo"
(prin1-to-string (mark-marker))
⇒ "#<marker at 2773 in strings.texi>"
noescapeが非nilの場合は、出力中のクォート文字の使用を抑制する。(この引数は、Emacsバージョン19以降でサポートされた。)
(prin1-to-string "foo")
⇒ "\"foo\""
(prin1-to-string "foo" t)
⇒ "foo"
Lispオブジェクトのプリント表現を文字列として取得する別の手段については、Formatting Stringsのformatを参照のこと。
このマクロは出力を文字列に送るようstandard-outputをセットアップして、フォームbodyを実行する。その文字列がリターンされる。
たとえばカレントバッファー名が‘foo’の場合、
(with-output-to-string (princ "The buffer is ") (princ (buffer-name)))
は"The buffer is foo"をリターンする。
この関数はprin1と同じようにobjectをstreamに出力するが、より“優雅(pretty)”な方法でこれを行う。すなわち、この関数は人間がより読みやすいようにオブジェクトのインデントとパディングを行う。