open Printf let _ = let values = [1; 2; 3; 4; 5; 6; 7] in let vals2 = map values with | 1 | 3 | 7 -> 10 | v when v mod 2 == 0 -> v + 1 | v -> v - 1 in let valfmtd = String.concat ", " (map vals2 with v -> sprintf "<%d>" v) in let suml, sumsquares, nelem = foldl values from 0.0, 0.0, 0 with (suml0, sumsq0, n), value -> let fv = float value in (suml0 +. fv, sumsq0 +. fv *. fv, n + 1) in let mean = suml /. float nelem in let sdev = sqrt ((sumsquares -. float nelem *. mean *. mean) /. (float nelem -. 1.0)) in let sumr = foldr values from 0.0 with value, sum0 -> ( printf "found value = %d, sum0 = %5.2f\n" value sum0; sum0 +. float value ) in printf "%s\n" valfmtd; printf "mean: %g, sdev: %g\n" mean sdev; printf "sumr: %g\n" sumr; iterate values with | 1 -> printf "one\n" | v when v mod 2 == 0 -> printf "%d is even\n" v | v -> printf "%d is odd\n" v