遅延評価
昨日([id:lethevert:20051123:p5])は眠かったせいか、何を言いたいのかよく分からないことを書いていたようだ。
要は、遅延評価が現実的に有効かどうかを考えたかった(のだと思う)のだが、
[id:lethevert:20050912:p2]
の時にも思ったのだけれど、遅延評価は使いようで、かなり有用なプログラミングツールになりそうだと思っているのだ。
たぶん、基本的な使い方は、こんな形になると思う。
mainFunction = doProcedure where data = data where data = ... //ここで、計算に必要なデータを*全て*記述する。 doProcedure = ... //上で定義したdataを利用して、*計算や処理のみ*を記述する。
たとえば、wgetを作るなら、遅延評価を使えば、理想的にはこんな風に書けるはず。
// Webはリンクでつながった再帰的な構造をしたデータとして表現される
- Web = Web WebPage [Web]
ただ、上のようなコードを書こうとしたときには、Webアクセスが入出力であって副作用が発生することが問題になる。
多分、Haskellじゃ、全ての処理をモナド内で完結させなければいけないから、無理だと思う(よく分からない。嘘かも)けど、Concurrent Cleanの一意型を使えば、もしかして、書けるかな?
ということで、そのうち、検証してみようと思う。