やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(10日目のあたり)
評価系まわりを書き始めるが、ここらへんから妙に省略度が高くなっているので追いかけるのが大変。14日まで頑張れば一通りできるようなのだけどそこまでたどり着けるのが不安になってきた。
さて、関数はS式関数と内部的な関数(システム関数)があって、システム関数は別のクラスとしてつくる。Moosp::Functionってのを用意してその下にMoosp::Function::Car,Moosp::Function::Quoteとかのクラスを用意するようにしてみた。システム関数は初期化の時に一括して環境(Env)のほうに登録するようになっているようだ。
ん?envとかevalはどっから出てきたんだ?と探したら14日目で
// システム関数の登録
Function funs = new Function(env, eval); // 関数クラスの設定
funs.registSystemFunctions(); // システム関数の生成
初期化時にenvとevalを渡すのね。10日目のFunctionクラスのコードは省略されていたのであとでまた見直す必要があるな。