drkcore

2009/04/27 21:08:48

MooseでLispを実装してみる(ラムダリストと変数の局所化)

やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。(11日目のあたり)

lambda1

  1. argumentsをスタックに積む。その際積んだスタート地点を記憶しておく
  2. ラムダリストを順番にスタックの値と交換する(元の値は待避される)
  3. body部を評価する
  4. ラムダリストをスタックの値と交換する(元の値に戻す)
  5. 評価した値を返して終了

例としてa=>5,b=>1であるとき以下の式を評価してみる。

((lambda (a b) (+ a b)) 2 3)

スタックに引数の値を積む

lambda2

スタックの値とラムダリストの値を交換する

lambda3

body部を評価したらスタックに待避した値を戻す

lambda4

これでOK

Moospもこの通りに実装すればよいみたい。あとsexpEvalの

argList = (List)argList.cdr;

は必要ないような気がする。

Comments