Function WRITE, PRIN1, PRINT, PPRINT, PRINC

UP


Function WRITE, PRIN1, PRINT, PPRINT, PRINC

Function WRITE, PRIN1, PRINT, PPRINT, PRINC

構文

write object &key array base case circle escape gensym length level lines miser-width pprint-dispatch pretty radix readably right-margin stream => object
prin1 object &optional output-stream => object
princ object &optional output-stream => object
print object &optional output-stream => object
pprint object &optional output-stream => <返却値なし>

引数と戻り値

object - オブジェクト
output-stream - 出力ストリーム指定子。デフォルトは標準出力。
array - generalized-boolean
base - 基数
case - 型(member :upcase :downcase :capitalize)のシンボル
circle - generalized-boolean
escape - generalized-boolean
gensym - generalized-boolean
length - 非負の整数か、nil
level - 非負の整数か、nil
lines - 非負の整数か、nil
miser-width - 非負の整数か、nil
pprint-dispatch - pprintディスパッチテーブル
pretty - generalized-boolean
radix - generalized-boolean
readably - generalized-boolean
right-margin - 非負の整数か、nil
stream - 出力ストリーム指定子。デフォルトは標準出力。

定義

write, prin1, princ, print, pprintは、 objectの印刷表現をoutput-streamに書き込みます。

writeは、Lispプリンターの一般的な入り口です。 次の表で示されるような名前のキーワードパラメーターが明に指定されたとき、 印刷が実行されている間はそれらの値が対応する プリンター制御変数に動的に束縛されます。 次の表で示されるような名前のキーワードパラメーターが明に指定されなかったとき、 対応するプリンター制御変数の値は writeが実行された時点でのものと同じになります。 いちど適切な束縛が確立されたら、 オブジェクトはLispプリンターによって出力されます。

パラメーター 対応する動的変数
array *print-array*
base *print-base*
case *print-case*
circle *print-circle*
escape *print-escape*
gensym *print-gensym*
length *print-length*
level *print-level*
lines *print-lines*
miser-width *print-miser-width*
pprint-dispatch *print-pprint-dispatch*
pretty *print-pretty*
radix *print-radix*
readably *print-readably*
right-margin *print-right-margin*

Figure 22-7. WRITE関数の引数の対応

prin1, princ, print, pprintは、 特定の印刷パラメーターを特定の値に暗に束縛します。 残りのパラメーターの値は、 *print-array*, *print-base*, *print-case*, *print-circle*, *print-escape*, *print-gensym*, *print-length*, *print-level*, *print-lines*, *print-miser-width*, *print-pprint-dispatch*, *print-pretty*, *print-radix*, *print-right-margin* から取得します。

prin1は、readからの入力に適切な出力を生成します。 それは*print-escape*trueに束縛します。

princは、ちょうどprin1と似ていますが、 出力にエスケープ文字を含めない所が違っています。 *print-escape*falseに、 *print-readably*falseに束縛します。 一般的なルールは、 princによる出力は人に見やすいことを意図しており、 prin1による出力はreadに受け入れられることを意図しています。

printは、ちょうどprin1に似ていますが、 objectの印刷表現の前に改行を、 その後にスペースを入れるところが違っています。

pprintは、ちょうどprintに似ていますが、 末尾の空白が省略され、かつobjectを印刷するときに *print-pretty*nil以外の値を指定し、 プリティプリントの出力を行うということが違っています。

output-streamは出力を送信するストリームを指定します。

影響

*standard-output*, *terminal-io*, *print-escape*, *print-radix*, *print-base*, *print-circle*, *print-pretty*, *print-level*, *print-length*, *print-case*, *print-gensym*, *print-array*, *read-default-float-format*

例外

なし。

参考

readtable-case, 22.3.4. FORMATプリンター操作

備考

関数のprin1printは、 *print-readably*を束縛しません。

(prin1 object output-stream)
==  (write object :stream output-stream :escape t)

(princ object output-stream)
==  (write object stream output-stream :escape nil :readably nil)

(print object output-stream)
==  (progn (terpri output-stream)
           (write object :stream output-stream
                         :escape t)
           (write-char #\space output-stream))

(pprint object output-stream)
==  (write object :stream output-stream :escape t :pretty t)

TOP, Github