Real World Haskell - 第4章 Part6 How to think about loops (続き)

Real World HaskellHaskell を継続的に勉強中。


Chapter 4. Functional programming
Chapter 4. Functional programming

How to think about loops

  • for/while ループは Haskell には存在しないので別の方法で表現する必要がある
Folding from the right
  • foldr で表現できる関数を primitive recursive と呼ぶ
    • リストを操作する関数はほとんど primitive recursive
      • filter, map, foldl, etc.
foldr :: (a -> b -> b) -> b -> [a] -> b

foldr step zero (x:xs) = step x (foldr step zero xs)
foldr _    zero []     = zero
foldr (+) 0 (1:2:3:[])
          == 1 +           foldr (+) 0 (2:3:[])
          == 1 + (2 +      foldr (+) 0 (3:[])
          == 1 + (2 + (3 + foldr (+) 0 []))
          == 1 + (2 + (3 + 0))