Variable *PRINT-READABLY*
generalized-boolean
false
もし*print-readably*がtrueのとき、 いくつかの特別なルールによって オブジェクトの出力の際に効果を発揮します。 特に、何らかのオブジェクトO1を印刷するときに 生成される印刷表現は、 標準のリードテーブルの効果があるLispリーダーによって読み込まれたとき、 その表現はO1と似たオブジェクトO2が生成されます。 生成された印刷表現は、 *print-readably*がfalseのときに生成されたものと 同じか同じではないものが生成されます。 もしreadablyなオブジェクトの印刷が不可能であるとき、 同じ実装では読み込むことができない構文(例えば#<構文)を使うのではなく、 型print-not-readableのエラーが発生します。 もし他のいくつかのプリンター制御変数の値が これらの要求に違反するような場合は、 それらの変数の値は無視されます。
特に*print-readably*がtrueであれば、 *print-escape*, *print-array*, *print-gensym*が それぞれtrue、 *print-length*, *print-level*, *print-lines*が それぞれfalseとして、 印刷が進行します。
もし*print-readably*がfalseのとき、 印刷の通常の規則と、 他のプリンター制御変数の通常の解釈は、 効果を発揮します。
print-objectのユーザー定義のメソッドを含む個別のメソッドは、 これらの要求を実装する責任を負います。
もし*read-eval*がfalseであり、 *print-readably*がtrueのとき、 リードマクロである#.の参照を出力するようなどのようなメソッドも、 何かを出力するのか、 あるいはエラーを通知するのか(上記で定義されたような)の どちらかになります。
(let ((x (list "a" '\a (gensym) '((a (b (c))) d e f g)))
      (*print-escape* nil)
      (*print-gensym* nil)
      (*print-level* 3)
      (*print-length* 3))
  (write x)
  (let ((*print-readably* t))
    (terpri)
    (write x)
    :done))
>>  (a a G4581 ((A #) D E ...))
>>  ("a" |a| #:G4581 ((A (B (C))) D E F G))
=>  :DONE
;; これは次に続く3つの仮想的な実装の例で共有される
;; セットアップコードです。
(setq table (make-hash-table)) =>  #<HASH-TABLE EQL 0/120 32005763> 
(setf (gethash table 1) 'one) =>  ONE
(setf (gethash table 2) 'two) =>  TWO
;; 実装A
(let ((*print-readably* t)) (print table))
Error: Can't print #<HASH-TABLE EQL 0/120 32005763> readably.
;; 実装B
;; ハッシュテープルが標準ではない#S表記で定義されていますが
;; これは実装定義の表記となるでしょう。
(let ((*print-readably* t)) (print table))
>>  #S(HASH-TABLE :TEST EQL :SIZE 120 :CONTENTS (1 ONE 2 TWO))
=>  #<HASH-TABLE EQL 0/120 32005763>
;; Implementation C
;; #.表記は*READ-EVAL*がtrueのときのみ使用できることに注意してください。
;; もし*READ-EVAL*がfalseのときは、同じ実装でも何か別の印刷の仕掛けにより
;; 復帰する仕組みでもない限り、エラーが発生します。
(let ((*print-readably* t)) (print table))
>>  #.(LET ((HASH-TABLE (MAKE-HASH-TABLE)))
>>      (SETF (GETHASH 1 HASH-TABLE) ONE)
>>      (SETF (GETHASH 2 HASH-TABLE) TWO)
>>      HASH-TABLE)
=>  #<HASH-TABLE EQL 0/120 32005763>なし。
write, print-unreadable-object
「類似性」の規則により、#Aか#(の構文は 要素の型がtではない配列に使用することができません。 実装は他の構文を使用するか、 あるいは型print-not-readableのエラーを通知するべきかもしれません。