OCaml中的递归类型?

时间:2011-01-22 20:58:09

标签: recursion types ocaml

嗨,这是我第一次在Stack Overflow上发帖,在尝试在OCaml中构建类型时遇到了问题

我正在尝试构造一个包含节点/叶子/等的类型树。这是我到目前为止所做的。

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree) | ....

我的节点应该是一个包含其名称和另一个树作为元组的类型。但是当我试图编译它时,它说树需要两个参数。所以我试过了:

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree ('a*'b))

我仍然收到错误。你注意到我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:9)

type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree

你可能希望你的节点有两个以上的孩子,不过

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree

PS:注意比在类型声明中,Foo of bar * bazFoo of (bar * baz)不一样:第一个是带有两个字段的构造函数Foo,第二个只有一个字段,属于(bar * baz)类型。