构造函数参数不匹配

时间:2018-11-28 23:16:31

标签: syntax compiler-errors ocaml

我为懒惰的二叉树创建了一个类型:

type 'a lBT = LEmpty | LNode of 'a * (unit -> 'a lBT) * (unit -> 'a lBT);;

并想要创建一个实例:

let exlBST = LNode(3, function() -> LEmpty, function() -> LEmpty);;

但我收到此错误:

Error: The constructor LNode expects 3 argument(s),
   but is applied here to 2 argument(s)

你能告诉我发生了什么吗?单元不被视为论点吗?

1 个答案:

答案 0 :(得分:2)

LNode的参数未按您期望的那样进行解析,它是一个具有两个函数的三元组,而是一对,其中第二项是返回另一对的函数。至少在中间函数周围使用括号,但最好还是在两者之间使用括号以保持一致,以使您的意图明确:

let exlBST = LNode (3, (function () -> LEmpty), (function () -> LEmpty));;

不幸的是,使用OCaml语法的这些奇怪的解析边缘情况/歧义中有一些。您将学会及时处理它,但是一个好的经验法则是:如果有疑问,请使用括号(或在适当的时候使用begin / end