なんとかなるんだろうけど、涙が出そうになってきたので断念。
一応、それ以外の理由として、
- コードの肥大化がすさまじい
- 変換することによって、関数のシグネチャが変わる(継続を渡すように変更するため)
- ベンチマークで脅威の低速を叩き出してる
(Gauche上で動かしてるのでしょうがない)
ということで、A正規形に切り替えることにする。
A正規形はCPS変換後逆CPS変換した形に極めて近い気がする。すべての継続の結果を変数として確保するので、スタックの肥大化が問題かな?
ここが詳しい。別に論文も読むといいと思う。
論文の最後にアルゴリズムをschemeで実装した例がある。
問題はこいつはCore SchemeというSchemeのサブセットを対象としているので、いろんな部分で限定的。(letrecとかないし・・・condとかどうするんだろう?)
その辺りを自前で拡張することができればよさそうだ。できるかな?
No comments:
Post a Comment