嗨,这是我第一次在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))
我仍然收到错误。你注意到我做错了什么?谢谢!
答案 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 * baz
和Foo of (bar * baz)
不一样:第一个是带有两个字段的构造函数Foo
,第二个只有一个字段,属于(bar * baz)
类型。