Lisp interpreter

id:propellaさんなど小言語を作ってみることが近所でブームになっているようである。OMetaを実際に使ったことがなかったわけなので、物は試しにLispインタープリタを書いてみた。applyとevalが陰と陽のように、あるいは磁場と電場のように絡まっている、ということをイメージしつつ、学部生時代に読まされたSICPのかすかな記憶を頼りに書く。

結果はダイナミックスコープのLispになってしまったが(環境のオブジェクトもほとんどただの辞書オブジェクトなのでstatic closureにすること自体はたいした手間ではないが)、pretty printも含めて300行くらいだからまあよしとしよう。あーでも本当にもっと昔から一生懸命勉強していればよかった。

なぜLispなのかということには微妙に理由があって、OMetaのstructural matchingを生かすのはLispである、ということで、例えば本物の属性文法評価器生成系を書くときにLispがあればもっと木構造の操作などが簡単になるだろう、という心積もりはあるわけではある。