遅延評価。
評価しなければならない値が存在するとき、実際の計算を値が必要になるまで行わないことをいう。
必要な式だけ評価する
main = do myIf (True) (putStrLn "then") (putStrLn "else") myIf :: Bool -> a -> a -> a myIf True t e = t myIf False t e = e
結果。
then
"else"は出力されない。
データ構造も遅延評価
main = do cs <- getContents putStr $ firstNLines 5 cs firstNLines n cs = unlines $ take n $ lines cs
take 5があるためlines csでは標準入力の5行分のみ処理される。
遅延評価の利点
- 不要な計算量を減らせる
- 無限の長さのリストが扱える
- インターフェースが統一できる
遅延評価の欠点
- 思った順番で操作を実行するのが難しい
- 式は必要になるまで評価されないので、式がいつ評価されるかわかりづらい
- デバッグしにくい
- どのような順番で関数が評価されるか予測がつかない
- スタックトレースが存在しない
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 314回
- この商品を含むブログ (320件) を見る