如何修复 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