You can define a function to be recursive with the
rec keyword, so it can call itself.
# let rec fact n = match n with | 0 -> 1 | n -> n * fact (n - 1);; val fact : int -> int = <fun> # fact 0;; - : int = 1 # fact 4;; - : int = 24
You can also define mutually recursive functions with the
and keyword, so they can call each other.
# let rec first x = match x with | 1 -> 1 | x -> second (x mod 10) and second x = first (x + 1);; val first : int -> int = <fun> val second : int -> int = <fun> # first 20;; - : int = 1 # first 12345;; - : int = 1
Notice that the second function does not have the