3imp 読んでみる (4)

heap-based の実装戦略 (続き

今日は昼から送別会らしいんですが出掛けるまで頑張ってみる。if 微妙だったので再読

if

正確さには欠けますが条件式を評価した結果を accumulator に置いといてその値を test した結果で then と else の切り分けをしている、という部分はセイフなはず。

set!

if と同様に set! する値を accumulator に入れとく、のかなぁ

call/cc
  • call/cc の評価は current environment、current rib、戻す式(??)が格納された新たな call frame を生じる (微妙
ムズい

call/cc たら手続き呼び出したら末尾再帰最適化云々なソレに関する記述は一旦スルー。3.4.1 方面に jmp

Assembly Code
  • (halt) : VM 停止。accumulator の値が戻る??
  • (refer var x) : var の値を current environment から探して accumulator にセットするのは良いのですが _sets the next expression to x_ って何だ (保留
  • (constant obj x) : obj を accumulator に、とありますがここでも _set the (ry_ な記述がある。保留

って戻って確認したら x はレジスタだったぞ。馬鹿だなぁ < わし
レジスタを以下に引用しておく

a: the accumulator
x: the next expression
e: the current environment
r: the current value rib
s: the current stack

うーん、まだちょっと x のナニが微妙。多分 SICP の linkage 的なソレに違いない (微妙。違うかも)、と見てるんですがとりあえずスルーで続けます。

  • (close vars body x) : クロージャを生成して accumulator に置く。

ドキュメントを前に後ろに行ったりきたりしてるんですが、recur は define-syntax しないと駄目そげ。recur のソレはドキュメント 26p

時間キタ

生産性悪い。