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プリンター操作
関数のprin1とprintは、 *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)