let rec fold (oper : int -> int -> int) (x0 : int) f = function
| [] -> x0
| x :: rest -> oper (f x) (fold oper x0 f rest);;
let fold (oper : int -> int -> int) (x0 : int) f =
let rec aux = function
| [] -> x0
| x :: rest -> oper (f x) (aux rest) in
aux;;
let sigma f l = fold ( + ) 0 f l;;
let pi f l = fold ( * ) 1 f l;;
|