2005/07/07

Haskell と継続について。いただいたコメントによるとモナドで継続を実現できるんですね。Haskellのコードで理解するのはつらいので、ここを読み返してみた。

f: x→y により実行される計算の継続は、f': x→((y→k)→k) となるような f': x→M(y) と見なせる。ここで M はモナド則を満たす。という理解でいいのかな。

にしても、これがHaskellのプログラミングで意味があるのかどうかは、あいかわらずよくわからない。実際に Haskell でプログラミングしているわけじゃないので、わからなくて当然といえばそれまでなんだけど、応用を生み出す妄想力の欠如を我ながら痛感するところ。ところで、あちこちで「Haskell では遅延評価があるから無理に継続引き渡しにしなくてもいい」って言及されているのは、まるで継続と遅延評価とが同じ概念の2つの表現みたいに読めてしまうから、いけないと思う。実際には、評価の順番が問題視されなければ継続引き渡しで処理が最適化されるわけじゃないってだけのことだと思うんだけど、僕のほうが勘違い?

No comments :