次: Output Variables, 前: Output Streams, 上: Read and Print
本節ではLispオブジェクトを表示する、 つまり、オブジェクトを表示表現に変換するLisp関数について述べます。
Emacsの表示関数のなかには、正しく読み取れるように クォート文字を出力に追加するものがあります。 使用されるクォート文字は`"'と`\'です。 これらは、文字列とシンボルを区別したり、 文字列やシンボル内の句読点文字を読み取るときに区切り文字として扱うこと を防ぎます。 詳しくはSee Printed Representation。 出力関数を選べば、クォートのありなしを指定できます。
テキストをLispシステムへ読み取る意図がある場合には、 曖昧さを避けるためにクォート文字付きで表示するべきです。 Lispプログラマに対してLispオブジェクトを明確に記述する場合も同様です。 しかし、人間向けの見やすい出力が目的であれば、 クォートせずに表示するのが普通はよいでしょう。
Lispオブジェクトはそれ自身を参照できます。 自己参照しているオブジェクトを普通の方法で表示するには 無限のテキストが必要であり、 そのような試みは無限再帰をもたらします。 Emacsはそのような再帰を検出し、 すでに表示したオブジェクトを再帰的に表示するかわりに `#level'を表示します。 たとえば、`#0'は、現在の表示操作においてレベル0のオブジェクトを 再帰的に参照することを示します。
(setq foo (list nil)) => (nil) (setcar foo foo) => (#0)
以下の関数では、streamは出力ストリームを表します。
(出力ストリームについては前節を参照。)
streamがnil
であったり省略すると、
standard-output
の値をデフォルトにします。
関数
(progn (print 'The\ cat\ in) (print "the hat") (print " came back")) -| -| The\ cat\ in -| -| "the hat" -| -| " came back" -| => " came back"
この関数はオブジェクトobjectの表示表現を ストリームstreamに出力する。
(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\""
この関数は同じ引数に対して
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オブジェクトの表示表現を得るための別の方法については、 String Conversionの
format
を参照。