今後の課題

今回作ったevalだと、defineが無いから名前をつけられない。
defineでテーブルにエントリを追加しなきゃダメだなぁ。
あと、defineでテーブルに追加しても、現時点では以下のものはテーブルから探さずに、決まった処理してるので、再定義ができない。

  • lambda
  • quote
  • cond
  • cons
  • car
  • cdr
  • null?
  • eq?
  • number?
  • -
  • +
  • *
  • /

The Little Schemerでは+の代わりに1を加算するadd1という手続きを定義していた。
だから、たとえば任意の数同士の和を計算する場合は、add1を再帰させるしか方法がなかった。
さらに再帰させるにもdefineが無いから名前が付けられず、Yコンビネータの使用を強いられるという鬼のような仕様になっていた。
この処理系でも、状況はほとんど変わらず、前回のようにリストの長さを調べたければYを使うしかない。


今後は、マクロの追加や末尾最適化とか、まだまだ改良の余地はいくらでもあるけど、そういう高度な話題は、ちゃんと勉強してからにしよう。