『On Lisp』を読んでいて出てきた「アナフォリックマクロ」(ある種の"不健全な"マクロ)をClojureでも書いてみた。 ついでに、Common LispとClojureでのマクロの「変数捕捉」についても確かめてみた。 アナフォリックマクロ(anaphoric macro; 前方照応的なマクロ)とは、通常は有害なマクロの「変数捕捉」(variable capture)を意図的に発生させることによって前方照応的なシンボル(≒ 自然言語における代名詞)を扱えるようにしたマクロのこと。 ちなみに、変数捕捉を起こしえない安全なマクロは「健全なマクロ(hygienic macro)」と呼ばれる。 マクロの変数捕捉 壊れた if-not / unlessマクロを通してマクロの変数捕捉が発生する仕組みを確認してみる。 Common Lispの場合 Common Lispで以下のようなマクロを定義した