On lisp 10章 「マクロそのほかの落とし穴」

引数の評価の回数

  • これはかなり重要。
  • 展開形の中で複数回引数を使うなら、letで束縛すべき。

評価の順番

  • これは重要だ。あまり気にしないことも多いので注意しないと。

マクロ展開関数の副作用

  • こういうことはしない。
    • でもinternはaifとかで使う。
  • ok

再帰

  • これは展開系が終わらないのは予想できる。
  • でも、引数の個数によって再帰終了条件とできるものなら大丈夫だとおもう。
    • aandなど
(defmacro aand (&rest forms)
  (let ((it (intern "IT")))
    (if (cdr forms)
        `(let ((,it ,(car forms)))
           (and ,it (aand ,@(cdr forms))))
        (car forms))))