% 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プリンター操作
関数の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)