如何修复 Ocaml Unbound 构造函数错误?
How to fix Ocaml Unbound constructor error?
let rec natadd_nat c =
match c with
| 0 -> O
| _ -> (S (natadd_nat (c-1)))
let rec natadd_int c =
match c with
| O -> 0
| S n' -> 1+(natadd_int n')
let natadd a b =
natadd_nat((natadd_int a) + (natadd_int b))
这是我用ocaml写的代码。 natadd_nat是一个函数,将一个int转换为由O和S组成的符号。natadd_int是一个将O和S的符号转换为int的函数。 natadd 函数将符号 a 和 b 从 natadd_int 更改为 int。并且把改成int的两个值相加后,放到natadd_nat函数里改回符号
但是在natadd_nat函数中,
Unbound constructor O
发生错误
| 0 -> O
部分。
我该如何解决这个问题?
示例)
# let two = S (S O) ;;
# let three = S (S (S O)) ;;
# natadd two three ;;
- : nat = S (S (S (S (S O))))
类型构造函数需要使用该构造函数声明类型(或者在这种情况下 构造函数。
从您发布的代码来看,您可能遗漏了以下内容:
type nat = O | S of nat
let rec natadd_nat c =
match c with
| 0 -> O
| _ -> (S (natadd_nat (c-1)))
let rec natadd_int c =
match c with
| O -> 0
| S n' -> 1+(natadd_int n')
let natadd a b =
natadd_nat((natadd_int a) + (natadd_int b))
这是我用ocaml写的代码。 natadd_nat是一个函数,将一个int转换为由O和S组成的符号。natadd_int是一个将O和S的符号转换为int的函数。 natadd 函数将符号 a 和 b 从 natadd_int 更改为 int。并且把改成int的两个值相加后,放到natadd_nat函数里改回符号
但是在natadd_nat函数中,
Unbound constructor O
发生错误
| 0 -> O
部分。
我该如何解决这个问题?
示例)
# let two = S (S O) ;;
# let three = S (S (S O)) ;;
# natadd two three ;;
- : nat = S (S (S (S (S O))))
类型构造函数需要使用该构造函数声明类型(或者在这种情况下 构造函数。
从您发布的代码来看,您可能遗漏了以下内容:
type nat = O | S of nat