(View this PageEdit this PageUploads to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide)
[blog] [ML] [todo] [CVS] [bug] [apache log] [swiki log] [statistics] [map] [man] [info] [アンテナ]

遅延評価

評価を遅延させること。
要するに、求めたいときに解を求めるという方式。
これには、正格性参照透明性といった概念が、強く関連すると
思われる。
逆に言えば、正格性は、遅延評価があるかということだと思われる。
(自身がないので、語尾が弱いです。)

例えば、無限集合を定義する。
(1) numsFrom n = n : numsFrom (n+1)
これは、nから始める無限集合となる。
これに対し、この集合に2乗する演算をapplyする

(2) squares = map (^2) (numsFrom 0)
当然、squaresも無限集合となるわけである。
このsquaresに対し、
(3) take 5 squares => [0,1,4,9,16]
とすると欲しい値だけ返ってくる。

上記、(1)〜(3)のものをそのまま書いちゃうと正格な言語では、
(1)を評価する時点で無限再帰に突入→死んじゃう。
遅延評価のある言語では、(1)〜(3)を定義し、(3)を評価するまで、(1)
と(2)を評価しないでおく。
そうすれば、破綻はしないのである。
このようにいつ評価してもかまわないというのは、多分、参照透明性
と関係があるわけ。

で、これの何がいいのかっていうと、おそらく、式そのものの性質を
そのまま書き下すことができるということなのである。

逆に言えば、無限集合となるものを言語で抽象的に自由に表現する
ことが可能なのである。

-----------

突っ込み大歓迎



-----------

Links to this Page