Scheme Compiler の勉強(21) - letrec の実装の細分化

あー、自分で書いたものを読み直して、ふと procedure の実装も少し細かいステップに分割できることに気付いた。難しく考えすぎていたようだ。しめしめ、これで先に進めるぞ。

  • 全ての関数が LLVM の i32 を返す(当面これで問題無し。いまのおもちゃのコンパイラにはコンスセルなんて高級なものは無いのだから)。
  • まず (letrec *1 が通るようにする。OK
  • 次に (letrec *2 が通るようにする。いまここまで。引数の数も固定でいい。少しずつ進める。
  • 次に (letrec *3 が通るようにする。これはまだエラーになる。どうやら、x を変なところに参照しにいっているようだ。

しかし朝夜に細切れの時間しか取れないのは辛いなぁ。10年、いや15年まえにやっていれば・・・。

*1:f lambda () 5))) (f

*2:f lambda (x) 5))) (f

*3:f lambda (x) x))) (f