Lisp Advent Calendar 2015の23日目の記事です。 qiita.com すごく及び腰でしたが、ずっと空いていたので、えいやで登録してみました。 マクロ展開時に副作用を起こすな危険、という内容です。 前書き On Lisp: マクロのその他の落し穴によると、「Lispは,マクロ展開を生成するコードは 第3章で論じた意味で純粋に関数的であるものと予期している. 展開を行うコードは引数として渡された式にのみ依存すべきで, 値を返す他には周囲の世界に影響しようとすべきではない.」とあります。下線を言い換えると副作用を起こすなということになると思います。NG例の一つに、マクロの展開回数を数えようとしてグローバル変数 *nil!s* に触る以下の例が示されています。 (defmacro nil! (x) ; 誤り (incf *nil!s*) `(setf ,x nil)) 正直