trace
マクロはデバッグに非常に便利です。しかし、どのマクロでも使用されると停止する。同様に私は次の操作を行いますしようとした場合:マクロとトレース方法
CL-USER> (trace push)
その後、それはというエラーをあげる:trace
のclhsページは、明らかに機能すると、それを定義するため
can't use encapsulation to trace anonymous function #<FUNCTION (MACRO-FUNCTION
PUSH) {100053FB9B}>
[Condition of type SIMPLE-ERROR]
まあ、それは明らかです。ですから、Common Lispでマクロをトレースする機能を持たない理由は何ですか?
Common Lispでマクロをトレースする方法は他にもありますか?
マクロがコンパイル時に展開された場合、それらの呼び出しをどのようにトレースするのでしょうか?展開されたマクロの最初の形式を選択し、その上に 'trace'を呼び出したマクロを書くことができます。 – Carcigenicate
どのような状況でマクロをトレースしますか? SBCLでは、非標準の ':ENCAPSULATE'引数を使用してトレースすることが可能です:'(trace push:encapsulate nil) '。通常、マクロ展開(macroexpanding)はマクロをデバッグするより良い方法です(Slyではマクロステップも使用できます)。マクロ内の複雑なロジックは、通常はトレースすることができる別の関数で実装することもできます。 – jkiiski
ありがとう@jkiiski!組み込みマクロのマクロ展開( 'push'のような)は、プログラムで実際に何が行われたのかを知る必要がある時代にはあまり役に立ちません。 – Mooncrater