遅延評価
#プログラミング言語の評価戦略
概要
Lazy Evaluation
学問的な厳密さを抜きにすれば、「遅延評価」と言えばほぼCall by Needのことを指します
理由はCall by Nameの効率が悪すぎるからです
非正格(non strict)と遅延評価(lazy evaluation)との違いについては非正格と遅延評価って何が違うの?
メリット
実行時の計算量が少なくなる場合もある
使われない式は評価されないから
アルゴリズムの記述と評価とを分離することで関数型プログラミングできる
無限に続く再帰的なデータを表現できる
デメリット
評価の順番が予測困難
そのまま書いた順番に評価されて欲しいIOとの相性が良くない
スペースリーク
正格に評価される場合はコンパクトな値にまとまるけど、遅延だと未評価の式が溜まっていく。
この未評価の式でメモリを浪費すること