遅延評価。

評価しなければならない値が存在するとき、実際の計算を値が必要になるまで行わないことをいう。

必要な式だけ評価する

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プログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門