次: , 前: Eval List, 上: Edebug


17.2.11 edebugでの出力

読者のプログラムの式が循環したリスト構造を含む値を作り出す場合、 edebugがそれを出力しようとするとエラーになります。

循環構造を扱う1つの方法は、出力を切り詰めるために print-lengthprint-levelを設定することです。 edebugが読者のためにこれを行います。 それらがnilであると、 edebugはprint-lengthprint-levelを50に束縛します。 (実際は、edebugが使う値は e-debug-print-lengthe-debug-print-levelが指定する。) See Output Variables

— ユーザオプション: edebug-print-length

nil以外であると、edebugが結果を出力するときには、 これをprint-lengthに束縛する。 デフォルト値は50

— ユーザオプション: edebug-print-level

nil以外であると、edebugが結果を出力するときには、 これをprint-levelに束縛する。 デフォルト値は50

パッケージcust-printを使えば、 循環構造や要素を共有する構造をより的確に出力することもできます。

cust-printをロードしてedebugでのみこの特別な出力を使うようにするには、 単にコマンドM-x edebug-install-custom-printを使うだけです。 標準の出力関数に戻すには、M-x edebug-uninstall-custom-printを使います。

循環構造を作るコードの例を示します。

     (setq a '(x y))
     (setcar a a)

特別な出力ではこれを`Result: #1=(#1# y)'と出力します。 `#1='の記法は、これに続く構造に`1'というラベルを付けます。 また、`#1#'の記法はすでにラベル付けした構造を参照します。 この記法は、リストやベクトルの任意の共有された要素に使われます。

— ユーザオプション: edebug-print-circle

nil以外であると、edebugが結果を出力するときには、 これをprint-circleに束縛する。 デフォルト値はnil

他のプログラムでもこの特別な出力を使えます。 詳しくは、cust-print.elを参照してください。