递归和互递函数
你可以使用 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
关键字。