マクロの実装するための構文がおぼえられないので、自分が理解しやすい書き方でマクロを定義する必要があるのではないだろうか?
自分の言葉で表現するためのマクロを量産したい。が、LISPに慣れていないと、以下の文法が頭に入ってこないので、大勢の人が脱落してしまうだろう。ちょっと見てみようか。以下に文法を示す
defmacro マクロ名 (引数リスト) 本体
これを見た直後は覚え得られるだろうが、2週間たった後でおもいだせるだろうか?
それよりは、すでに覚えている言葉、もしくは、自然にとっつきやすい言葉であれば、2週間後でも理解できるのではないだろうか?
以下の記号になると、暗記が必要になる。数は多くないがいずれなれるのだと思うが、マクロを使って自分にとっては、とっつきやすい単語に置き換えたほうがよい。しかし、十人十色、それぞれが自分のマクロを作れればの話だ。
依然として、以下のような記法よりも良い方法があるはずである。
(let ((x 5) (lst '(2 3))) `(1 ,x ,@lst)) ;; => (1 5 2 3)
(defmacro my-when (condition &rest body)
`(if ,condition
(progn ,@body)))
;; マクロ使用 (my-when (> x 0) (print "正の数") (print x))
;; 展開結果
(if (> x 0)
(progn
(print "正の数")
(print x)))