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
がされた状態で 循環構造を印刷しようとしたときは、 おそらくループの状態を引き起こし、 終了できない状態になります。