ML :
val foldl : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b
Haskell :
foldl :: (a -> b -> a) -> a -> [b] -> a
foldr :: (a -> b -> b) -> b -> [a] -> b
Haskell foldl - .
, , foldr - , , , :
foldr f init [x1, x2, ..., xn]
==> f(x1, f(x2, ..., f(xn, init)...))
-, ML
foldl f init [x1, x2, ..., xn]
==> f(xn,...,f(x2, f(x1, init))...)
, ML foldl - , , .
Haskell
foldl f init [x1,x2,.....,xn]
==> f(f(...f(f(init,x1),x2),.....),xn)
haskell foldl , , .
ML f(x1,init), x1 - init, , foldr xn - init, .
, Haskell f(init,x1), init - x1. .
ML foldl:
foldl (op -) 100 [1,2,3,4]
==> 4 - (3 - (2 - (1 - 100)))
==> 102
ML/Haskell foldr:
foldr (-) 100 [1,2,3,4] or foldl (op -) 100 [1,2,3,4]
==> 1 - (2 - (3 - (4 - 100)))
==> 98
Haskell foldl:
foldl (-) 100 [1,]
==> (((100 - 1) - 2) - 3) - 4
==> 90
, foldl. ML left , Haskell left .
, , . ( init x1 , , .)