% Variable *PRINT-LEVEL*, *PRINT-LENGTH*
Variable *PRINT-LEVEL*
, *PRINT-LENGTH*
非負の整数か、nil
*print-level*
は、
どれくらい深いレベルの階層にネストされたオブジェクトを印刷するかを制御します。
もし値がfalseのときは、制御は行われません。
そうではないとき、その整数は印刷する最大の階層のレベルを示します。
オブジェクトが印刷されるときが階層0
であり、
その要素(リストか配列の)が階層1
であり、それが続きます。
もし再帰的に印刷されるオブジェクトが要素を持っており、
オブジェクトの階層のレベルが
*print-level*
の値以上のときは、
そのオブジェクトは#
として印刷されます。
*print-length*
は
どれくらいの要素を印刷するかを制御します。
もし値がfalseのときは、印刷される要素の数に制限はありません。
そうではないとき、
疎の整数は印刷されるオブジェクトの最大の要素数を示します。
もし超過したとき、プリンターはその他の要素の場所に...
を印刷します。
ドットリストの場合、そのリストが正確に
*print-length*
の値と同じ要素数を含んでいたとき、
...
を印刷するのではなく、終端しているアトムが印刷されます。
*print-level*
と*print-length*
は、
リストのような構文で印刷されるどのような
オブジェクトの印刷にも影響を与えます。
シンボル、文字列、ビット配列といった印刷には影響しません。
(setq a '(1 (2 (3 (4 (5 (6))))))) => (1 (2 (3 (4 (5 (6))))))
(dotimes (i 8)
(let ((*print-level* i))
(format t "~&~D -- ~S~%" i a)))
>> 0 -- #
>> 1 -- (1 #)
>> 2 -- (1 (2 #))
>> 3 -- (1 (2 (3 #)))
>> 4 -- (1 (2 (3 (4 #))))
>> 5 -- (1 (2 (3 (4 (5 #)))))
>> 6 -- (1 (2 (3 (4 (5 (6))))))
>> 7 -- (1 (2 (3 (4 (5 (6))))))
=> NIL
(setq a '(1 2 3 4 5 6)) => (1 2 3 4 5 6)
(dotimes (i 7)
(let ((*print-length* i))
(format t "~&~D -- ~S~%" i a)))
>> 0 -- (...)
>> 1 -- (1 ...)
>> 2 -- (1 2 ...)
>> 3 -- (1 2 3 ...)
>> 4 -- (1 2 3 4 ...)
>> 5 -- (1 2 3 4 5 6)
>> 6 -- (1 2 3 4 5 6)
=> NIL
(dolist (level-length '((0 1) (1 1) (1 2) (1 3) (1 4)
(2 1) (2 2) (2 3) (3 2) (3 3) (3 4)))
(let ((*print-level* (first level-length))
(*print-length* (second level-length)))
(format t "~&~D ~D -- ~S~%"
*print-level* *print-length*
'(if (member x y) (+ (car x) 3) '(foo . #(a b c d "Baz"))))))
>> 0 1 -- #
>> 1 1 -- (IF ...)
>> 1 2 -- (IF # ...)
>> 1 3 -- (IF # # ...)
>> 1 4 -- (IF # # #)
>> 2 1 -- (IF ...)
>> 2 2 -- (IF (MEMBER X ...) ...)
>> 2 3 -- (IF (MEMBER X Y) (+ # 3) ...)
>> 3 2 -- (IF (MEMBER X ...) ...)
>> 3 3 -- (IF (MEMBER X Y) (+ (CAR X) 3) ...)
>> 3 4 -- (IF (MEMBER X Y) (+ (CAR X) 3) '(FOO . #(A B C D ...)))
=> NIL
なし。
なし。