% Function PPRINT-FILL, PPRINT-LINEAR, PPRINT-TABULAR
Function PPRINT-FILL, PPRINT-LINEAR, PPRINT-TABULAR
pprint-fill stream object &optional colon-p at-sign-p
=> nil
pprint-linear stream object &optional colon-p at-sign-p
=> nil
pprint-tabular stream object &optional colon-p at-sign-p tabsize
=> nil
stream - 出力ストリーム指定子
object - オブジェクト
colon-p - generalized-boolean。デフォルトはtrue。
at-sign-p - generalized-boolean。デフォルトは実装依存。
tabsize - 非負の整数。デフォルトは16。
pprint-fill, pprint-linear, pprint-tabularの関数は、
streamに対してリストをどのように
プリティプリントとして出力するか特定の方法を指定します。
colon-pがtrueのときは、
各関数は出力の周りを囲うようにカッコを出力します。
各関数は、at-sign-pの引数を無視します。
(両方の引数が、ひとつの引数しか必要ないにもかかわらず含まれるのは、
~/.../を経由して使用される関数や、
set-pprint-dispatch関数によって直接使われるからです)
各関数は省略形を扱い、循環構造を検出し、
共有構造を正しく検出し、
そしてリストではないものが指定されたときは
writeを使用してobjectを印字します。
objectがリストであり、
*print-pretty*の値がfalseのときは、
これらの関数はobjectを出力する際に
22.1.3.5. リストとコンスの印字の定義に従い最小の空白を使用します。
それ以外のときは
(objectがリストであり、*print-pretty*の値がtrueのとき)、
次のように出力します。
pprint-linearはリストを、
ひとつの行に全てを出力するか、
あるいは各要素を行で区切るかのどちらかです。pprint-fillはリストに対して、
可能な限り一行に多くの要素を出力します。pprint-tabularはpprint-fillと同じですが、
各要素が列をなして並ぶように印字します。
tabsizeは列の間隔をemsで指定し、
これはある列の前の開始位置から次の列の開始位置までの合計の間隔です。一行の長さが25のときの
下記が評価されたときの出力を示します。
(progn (princ "Roads ")
(pprint-tabular *standard-output* '(elm main maple center) nil nil 8))
Roads ELM MAIN
MAPLE CENTER
指定したストリームに出力されます。
もし決定できるならば、指定したストリームのカーソルの位置。
なし。
なし。
関数pprint-tabularは次のように定義できます。
(defun pprint-tabular (s list &optional (colon-p t) at-sign-p (tabsize nil))
(declare (ignore at-sign-p))
(when (null tabsize) (setq tabsize 16))
(pprint-logical-block (s list :prefix (if colon-p "(" "")
:suffix (if colon-p ")" ""))
(pprint-exit-if-list-exhausted)
(loop (write (pprint-pop) :stream s)
(pprint-exit-if-list-exhausted)
(write-char #\Space s)
(pprint-tab :section-relative 0 tabsize s)
(pprint-newline :fill s))))
これはformatを使用して
この関数を定義するには不便であることに注意してください。
なぜならリストの繰り返し内にあるformatの命令~:Tに
tabsize引数を渡す必要があるためです。