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


20.5 出力関数

このセクションではオブジェクトをオブジェクトのプリント表現に変換して、LispオブジェクトをプリントするLisp関数を説明します。

Emacsプリント関数には、正しく読み取れるように必要なとき出力にクォート文字を追加するものがあります。使用されるクォート文字は‘"’と‘\’です。これらは文字列をシンボルと区別するとともに、文字列とシンボル内の区切り文字が読み取りの際に区切り文字として扱われることを防ぎます。完全な詳細はプリント表現と読み取り構文を参照してください。クォートするかしないかはプリント関数の選択によって指定できます。

そのテキストがLispに読み戻す場合、またはLispプログラマーにLispオブジェクトを明解に説明するのが目的の場合は、曖昧さを避けるためにクォート文字をプリントするべきです。しかしプログラマー以外の人間にたいして出力の見栄えを良くするのが目的なら、通常はクォートなしでプリントしたほうがよいでしょう。

Lispオブジェクトは自己参照ができます。通常の方法で自己参照オブジェクトをプリントするにはテキストが無限に必要であり、その試みにより無限再帰が発生する恐れがあります。Emacsはそのような再帰を検知して、すでにプリントされたオブジェクトを再帰的にプリントするかわりに、‘#level’をプリントします。たとえば以下はカレントのプリント処理において、レベル0のオブジェクトを再帰的に参照することを示しています:

(setq foo (list nil))
     ⇒ (nil)
(setcar foo foo)
     ⇒ (#0)

以下の関数ではstreamは出力ストリームを意味します(出力ストリームの説明は前のセクションを参照。デバッグではストリーム値としてexternal-debugging-outputも有用) streamnilか省略された場合のデフォルトはstandard-outputの値です。

Function: print object &optional stream

print関数はプリントを行うための便利な手段である。この関数はobjectの前後に改行を付与してobjectのプリント表現をstreamにプリントする。クォート文字が使用される。printobjectをリターンする。たとえば:

(progn (print 'The\ cat\ in)
       (print "the hat")
       (print " came back"))
     -|
     -| The\ cat\ in
     -|
     -| "the hat"
     -|
     -| " came back"
     ⇒ " came back"
Function: prin1 object &optional stream overrides

この関数は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"

overridesが非nilなら、それはt (すべてのプリンター関連変数にたいしてデフォルトとしてprin1を使うよう指示する)、あるいはセッティングのリストであること。詳細については出力変数のオーバーライドを参照のこと。

Function: princ object &optional stream

この関数はobjectのプリント表現をstreamに出力する。objectをリターンする。

この関数はreadではなく人間が読める出力を生成することを意図しているので、クォート文字を挿入せず文字列のコンテンツの前後にダブルクォート文字を配置しない。各呼び出しの間にスペースを何も出力しない。

(progn
  (princ 'The\ cat)
  (princ " in the \"hat\""))
     -| The cat in the "hat"
     ⇒ " in the \"hat\""
Function: terpri &optional stream ensure

この関数はstreamに改行を出力する。名前の由来は“terminate print(プリントを終端する)”。ensureが非nilの場合には、streamがすでに行頭にあれば改行をプリントしない。この場合にはstreamに関数は指定できず、指定するとエラーがシグナルされる。この関数は改行をプリントしたらtをリターンする。

Function: write-char character &optional stream

この関数はcharacterstreamに出力する。characterをリターンする。

Function: flush-standard-output

端末に出力を送信するようなEmacsベースのバッチスクリプトでは、standard-outputに改行文字を書き込むたびにEmacsが自動的に出力を表示する。この関数を使えば最初に改行文字を送信せずにstandard-outputをフラッシュ(flush)できるので、不完全な行を表示することができる。

Function: prin1-to-string object &optional noescape overrides

この関数は同じ引数でprin1がプリントするテキストを含む文字列をリターンする。

(prin1-to-string 'foo)
     ⇒ "foo"
(prin1-to-string (mark-marker))
     ⇒ "#<marker at 2773 in strings-ja.texi>"

If overrides is non-nil, it should either be t
(which tells prin1 to use the defaults for all printer related
variables), or a list of settings.  See 出力変数のオーバーライド, for details.

noescapeが非nilなら出力中のクォート文字の使用を抑制する(この引数はEmacsバージョン19以降でサポートされた)。

(prin1-to-string "foo")
     ⇒ "\"foo\""
(prin1-to-string "foo" t)
     ⇒ "foo"

Lispオブジェクトのプリント表現を文字列として取得する別の手段については、文字列のフォーマットformatを参照のこと。

Macro: with-output-to-string body…

このマクロは出力を文字列に送るようstandard-outputをセットアップしてフォームbodyを実行する。その文字列をリターンする。

たとえばカレントバッファー名が‘foo’なら、

(with-output-to-string
  (princ "The buffer is ")
  (princ (buffer-name)))

"The buffer is foo"をリターンする。

Function: pp object &optional stream

この関数はprin1と同じようにobjectstreamに出力するが、より優雅(pretty)な方法でこれを行う。すなわちこの関数は人間がより読みやすいようにオブジェクトのインデントとパディングを行う。

任意のバイナリーデータを書き込んだり非POSIXホストで改行変換を回避するためにこのセクションで説明した関数を使用してbatchモードでバイナリーI/Oモードを使用する必要がある場合にはset-binary-modeを参照してください。


Next: 出力に影響する変数, Previous: 出力ストリーム, Up: Lispオブジェクトの読み取りとプリント   [Contents][Index]