メモのメモのfoldl

色々メモ帳を浮気する駄目な性格なのでメモがなくならないうちにメモのメモ

foldl

foldl            :: (a -> b -> a) -> a -> [b] -> a
foldl f z []     =  z
foldl f z (x:xs) =  foldl f (f z x) xs
--  foldl f z [x1, x2, ..., xn] == (...((z `f` x1) `f` x2) `f`...) `f` xn
foldl :: (a -> b -> a) -> a -> [b] -> a
          ~~~~~~~~~~     ~~   ~~~    ~~
           function      Seed list     完成!!
foldl op Seed [] = Seed
foldl op Seed [x:xs] = foldl op (Seed `op` x) xs
Prelude> foldl (+) 0 [1..5]
15
-- ((+) ((+) ((+) ((+) ((+) 0 1) 2) 3) 4) 5) 
-- ((0+1)+2)+3)+4)+5) = 15

図があるといいですね。
Fold(Wikipedia)