letrecを実装した
私がRubyで書いているLisp方言、 [Nendo]について。
やっとletrecを実装した。1時間半位で実装できた。変換処理はRubyで実装している。 SchemeのR5RS仕様書に内部defineはletrecに変換可能と書いてあるので、[Nendo]も同じ仕様で実装しよう。 やっぱりリスト処理はRubyよりも、Lisp系言語の方が書きやすいので、そのコンパイルフェーズは[Nendo]自身で書きたい。 もっとよく考えていけば、[Nendo]自身で書ける部分も増えそうだけど、鶏が先か卵が先かというような、複雑な依存関係が増えそうな危険な香りもするのでちょっとずつリファクタリングする方が良いかな?
ちなみに、もしやと思ってGauche 0.9のcompile.scmを見てみたら、Gaucheも内部defineはletrecに変換しているようだ。 やっぱり、早めに内部defineは消しておき、letrec 1本に収束させた方が綺麗だからだと思う。