GaucheFest第12回
継続がらみの論文読み
http://page.freett.com/shelarcy/log/2006/diary_05.html#satuki312006
Delimited Dynamic Binding
部分継続?や合成可能継続?というのは、限定継続? (Delimeted Continuation) の別名 shift/pushPropt を shift/reset のかわりに使っているが、prompt を取る以外は同じ Scheme:処理系依存構文 にあるような動的束縛? (Dynamic Binding) と限定継続の組み合わせは、動的束縛と一般の継続 (Undelimited Continuation) の組み合わせと違って未定義の動作を引き起こす
たとえば
dlet p = 1 in reset in dlet p = 2 in shift as f in pの結果は期待する1ではなく2になったり、スタックが積まれたり。そういう例は添付するソースコードに色々と載せてある
解決策
DB (動的束縛)から DC (限定継続)への変換と DB + DC から DC への変換を理論的に定義してやり、 「DC を使って DB を実装したもの」を使うようにすれば良い