OCaml 匹配如何工作?

How OCaml match works?

(* Data type definitions *)
type t =
  | True
  | False
  | If of t * t * t
  | Zero
  | Succ of t
  | Pred of t
  | IsZero of t

let rec isNumber t =
  match t with 
    Zero -> true 
  | Succ t1 -> isNumber t1 
  | _ -> false

当我们调用 isNumber 给出模式 (Succ (Succ (Succ (Succ Zero)))) 时,这是如何工作的?

t类型是递归的。如您所见,它可以用 Succ 构造,它采用另一个类型 t 的值,它本身可以用 Succ 构造,依此类推。

isNumber函数同样是递归的。如果找到 Succ t1 模式,它会在 t1.

上调用 isNumber

对于 Succ (Succ (Succ (Succ Zero))) 的示例值,它看起来像:

isNumber (Succ (Succ (Succ (Succ Zero))))
isNumber (Succ (Succ (Succ Zero)))
isNumber (Succ (Succ Zero))
isNumber (Succ Zero)
isNumber Zero
true