30分プログラム、その607。id:athosに影響されて、Let Over LambdaのマクロをGaucheで書いてみる。 今回書くのはdefmacro!gというマクロ。これは、g!で始まるシンボルを自動でgensymにしてくれる。使い方は下に書いてあるのを見てください。 で、このdefmacro!gはコード全体を走査して、g!で始まるシンボルを取り出してくる。これが、flattenでリストを潰してfilterするだけで簡単に書けちゃう。こういうのが、全部の構文要素がリストでできてるLispの強みだと思う。 使い方 ;; nifは第1引数が正、ゼロ、負で場合分けするマクロ ;; (nif 42 'plus 'zero 'minus) => 'plus ;; ;; g!resultが自動でgensymになる (define-macro!g (nif a plus zero neg) `(