プログラミング Haskell 第12章 遅延評価 その2
遅延評価の章の後半です。
- 12.6 部品プログラミングは無限リストと take などを組み合わせて、データを制御を切り離して記述できる遅延評価の強みについて
- 正格適用 - $! 演算子をつかうと式を正格に評価する。つまり遅延評価しないで先に評価してからその値を利用する
- f $! x という式だと x を評価して(この時の x 自体の評価は遅延評価される)、その結果の値に f を適用する
- つまり $! は意味的には id (引数をそのまま返す)で、ただし正格な関数ということだと思います
- 遅延評価はメモリを消費することがあるので正格演算子を使ってこれを抑制する
sumwith v [] = v sumwith v (x:xs) = sumwith (v+x) xs sumwith' v [] = v sumwith' v (x:xs) = sumwith $!(v+x) xs