TinySCHEME のソースを読む -5 define の例

TinySCHEME のソースを読む -1 セルの構造
TinySCHEME のソースを読む -2 シンボル、環境
TinySCHEME のソースを読む -3 TinySCHEME の処理エンジン
TinySCHEME のソースを読む -4 トップレベルからの処理の流れ
TinySCHEME のソースを読む -5 define の例
tsdbg TinyScheme 用デバッグ extension

define の例

最後に、

    (define (my-sum x y) (+ x y))

がどのようなデータで表現されていくのかを簡単にメモ。

1. OP_EVAL まで

評価される直前、(define (my-sum x y) (+ x y)) は以下の形のセルで表現される。

2. define の評価

シンボル define は syntax であるため、OP_EVAL で評価されたセルは OP_DEF0 に渡される。
ここでは、define された関数が (lambda (x y) (+ x y)) に置き換わる。
lambda に置き換わったセルは以下のように表現される:

3. クロージャ

lambda に置き換わったセルは、さらにクロージャへ変換される。
OP_LAMBDA1 の mk_closure() がこの処理を行う。

4. 環境に関数を追加

OP_DEF1 で、現在の環境に関数を slot として追加する。
slot は以下の形になる: