OCaml中的递归类型?

Bri*_*ian 5 recursion ocaml types

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

我正在尝试构造一个具有节点/叶子/等的类型树.这就是我到目前为止所拥有的.

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree) | ....
Run Code Online (Sandbox Code Playgroud)

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

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree ('a*'b))
Run Code Online (Sandbox Code Playgroud)

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

gas*_*che 9

type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree
Run Code Online (Sandbox Code Playgroud)

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

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree
Run Code Online (Sandbox Code Playgroud)

PS:注意比在类型声明中,Foo of bar * baz并且Foo of (bar * baz)不相同:第一个是Foo具有两个字段的构造函数,第二个只有一个字段,类型(bar * baz).