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 "(" "")
(if colon-p ")" ""))
:suffix (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
引数を渡す必要があるためです。