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
(* 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