(**
* A small OCaml (https://OCaml.org) program, written with keywords in English,
* It defines a recursive factorial function, and run some test on it.
*
* See
*
* Copyright Lilian Besson, 2021, released under the MIT License
* See
*)
let rec fact (n : int) =
match n with
| n when n < 0 -> failwith "Error: n has to be >= 0 for fact."
| 0 -> 1
| 1 | 2 -> if n=1 then 1 else 2
| n -> n * (fact (n-1))
;;
let print = Format.printf;;
print "Test with fact written with the keywords in English! (default mode)\n%!";;
assert (1 = (fact 1));;
assert (2 = (fact 2));;
assert (6 = (fact 3));;
for n = 6 to 10 do
print "fact(%i) = %i\n%!" n (fact n);
done;;
for n = 13 downto 11 do
print "fact(%i) = %i\n%!" n (fact n);
done;;
let n = ref 3 in
while !n < 6 do
print "fact(%i) = %i\n%!" !n (fact !n);
incr n;
done;;