やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(11日目のあたり)
- argumentsをスタックに積む。その際積んだスタート地点を記憶しておく
- ラムダリストを順番にスタックの値と交換する(元の値は待避される)
- body部を評価する
- ラムダリストをスタックの値と交換する(元の値に戻す)
- 評価した値を返して終了
例としてa=>5,b=>1であるとき以下の式を評価してみる。
((lambda (a b) (+ a b)) 2 3)
スタックに引数の値を積む
スタックの値とラムダリストの値を交換する
body部を評価したらスタックに待避した値を戻す
これでOK
Moospもこの通りに実装すればよいみたい。あとsexpEvalの
argList = (List)argList.cdr;
は必要ないような気がする。