質問のマクロ -> 匿名関数->
を読むと、マクロが匿名関数でうまく機能しないことがわかります。マクロを正しく使用するには、実装を理解する必要があります。その意味で、マクロは「リーキー」です。実装は API によって完全に隠されているわけではありません。
(十分に複雑な) Clojure マクロがリークしやすいのは常にそうなのでしょうか?
[比較のために: 同様の問題が C プリプロセッサで発生し、マクロ引数が不注意に処理されると奇妙な副作用が見られる場合があります。その場合、マクロの引数を (マクロ内で) 括弧で囲むことによって問題を解決できます。これは可変状態 (つまり、引数を使用するたびに状態が変化する) で C マクロを使用する問題を解決しませんが、おそらく、関数型言語ではその問題を無視するか、let
複数の評価を避けるために使用することができます。]