% Variable *PRINT-CIRCLE*
Variable *PRINT-CIRCLE*
generalized-boolean
false
印刷を行うオブジェクトの 循環と共有を検出するかどうかを制御します。
もし値がfalseのとき、 印刷の処理は、循環と共有の検出をすることなく 再帰的に降下していくことによって行います。
もし値がtrueのとき、
プリンターは構造を印刷する中で
循環と共有を検出するよう努力し、
循環か共有の要素を示す#n=
と#n#
構文を使用します。
もしユーザーが定義したprint-object
メソッドが
提供されたストリーム以外に印刷するとき、
循環の検出はそのストリームに対してやり直しされます。
Lispリーダーが自動的にオブジェクトの共有の保証を行うときは
(例えば内部シンボルに生じたときなど)、
実装は#n#
表記を使用するべきではないことに注意してください。
(let ((a (list 1 2 3)))
(setf (cdddr a) a)
(let ((*print-circle* t))
(write a)
:done))
>> #1=(1 2 3 . #1#)
=> :DONE
なし。
*print-circle*
にnil
がされた状態で
循環構造を印刷しようとしたときは、
おそらくループの状態を引き起こし、
終了できない状態になります。