List.fold_left と List.fold_right

List.fold_left は左から,List.fold_right は右からたたみ込む。

 # List.fold_left (fun x y -> "(" ^ x ^ "," ^ y ^ ")") "A" ["B";"C";"D"];;
 - : string = "(((A,B),C),D)"
 # List.fold_right (fun x y -> "(" ^ x ^ "," ^ y ^ ")") ["A";"B";"C"] "D";;
 - : string = "(A,(B,(C,D)))"

引数の順番が違うので,ちょっと注意が必要。

 # List.fold_left;;
 - : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a = <fun>
 # List.fold_right;;
 - : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b = <fun>