遞迴和互遞函式

你可以使用 rec 關鍵字定義要遞迴的函式,以便它可以呼叫自身。

# 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

你還可以使用 and 關鍵字定義相互遞迴函式,以便它們可以相互呼叫。

# 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

請注意,第二個函式沒有 req 關鍵字。