Island Life

< 日本の定額給付金って給付の手続きを自治体... | らむ太語録 >

2009/03/06

returnを継続プリミティブにする話

思考実験: returnを関数と思ってみる話 - d.y.d

  • 「C や JavaScript 等の関数から返る"return"を、 first-class object と思ってみると面白いんじゃないでしょうか」
  • 「"call/cc" って難しいので、継続のプリミティブは "return" ということにしよう。特に手続き型言語では」
  • 「難しいのは継続ではないcallccだ…とすると、難しいのは限定継続ではなくshift/resetなのでは?」

おもしろい。

関数型言語だとlexical scopeと関数とがunifyされちゃっているので 「自分を囲む関数」というのをアレするのが面倒だけど、関数がまだ特別な 位置を占めてる言語では案外わかりやすいかもしれぬ。

限定継続の方だけど、関数をまたがったshift/resetっていうのは普通にありそうな 気がする。Kahuaでも使ったし。(Kahuaでの用法は、上位層のシステムと下位層の システムを切り離すのにresetを使ってて、アプリケーション層ではほとんどcall/ccの のりでshiftを使う。resetは下の方に隠れてて意識しない)。

もともとshiftって対になるresetは明示しないもんなんで、そこで無理が来てるのかな。 確かにdynamic scopeなふるまいなんだけど、もともとcall/ccがそういう動作を するからなあ (クロージャ→静的環境のキャプチャ、call/cc→動的環境のキャプチャ)。

Tag: Programming