今後の課題
今回作ったevalだと、defineが無いから名前をつけられない。
defineでテーブルにエントリを追加しなきゃダメだなぁ。
あと、defineでテーブルに追加しても、現時点では以下のものはテーブルから探さずに、決まった処理してるので、再定義ができない。
- lambda
- quote
- cond
- cons
- car
- cdr
- null?
- eq?
- number?
- -
- +
- *
- /
The Little Schemerでは+の代わりに1を加算するadd1という手続きを定義していた。
だから、たとえば任意の数同士の和を計算する場合は、add1を再帰させるしか方法がなかった。
さらに再帰させるにもdefineが無いから名前が付けられず、Yコンビネータの使用を強いられるという鬼のような仕様になっていた。
この処理系でも、状況はほとんど変わらず、前回のようにリストの長さを調べたければYを使うしかない。
今後は、マクロの追加や末尾最適化とか、まだまだ改良の余地はいくらでもあるけど、そういう高度な話題は、ちゃんと勉強してからにしよう。