LispのMacro
始めて知った。Schemeにはあるのかな。cs61Aで使ったときはそんなのやってなかった気がする。よく言われてることだけどLispだとDSLが容易ってのはこのことね。するにはこれはいいですね。
たとえばリストを作るときは > (list 1 2 3) > (1 2 3) そこでこんなマクロを作ると (defmacro backwards (expr) (reverse expr)) こんなことになる > (backwards (3 2 1 list)) > (1 2 3)
Lispのマクロでは引数がevaluateされずにマクロに渡されて、それが新たなexpressionを返す。それからやっとevaluateされる。詳しい事はPractical Common Lispのチャプター3Practical: A Simple Databaseに書いてあります。また寄り道してる。もっとRubyを読み進めないとです。