2021-03-07
昨日から「rulebook.pdfにはあるけど本には一切言及がない言語」をやり始めたが、その中に演習システムですら言及されてない言語があって、それが面白かったので書いておく
型推論はノリがちょっと違うのでその前に意味論のほうを固めておきたくなった
EvalDContML4ってやつ
Evaluate Delimited Continuation ML4
継続っていうのは早い話が残りの計算(のリスト)で、EvalContMLではこれを伸ばしたり縮めたりして評価を進めて、letccみたいな構文でその場所の継続を取り出せるようにしていた。しかし継続は一度呼ばれるとプログラムの最後まで評価が進んでしまう(意味論としては呼んだ箇所の継続を捨てて呼んだ継続に置き換えるみたいになる)ので、ちょっと扱いにくい 限定継続は、取り出す継続の範囲を決められる(残りの計算のリストの全部じゃなくて一部を切り出せる)ようになっている。境界を定められるのでフレンドリー。のはずだが……
規則での表現が面白くて、継続が限定継続のリストになっている
つまり限定継続が残りの計算のリストで、継続が残りの計算のリストのリスト
shiftで今の継続のheadを奪って環境に入れる
resetで今の継続の上に何もしない限定継続_を挿入
これで継続が「切れ」て、そこから先はshiftで取り出せなくなるわけですね
それはそうとしてshift/resetの直観が生えない。助けてくれ
letccはそこに穴が空いてて継続呼ぶとそこに入るみたいな感覚があるわけだが
直観掴めた。よかったね