我为懒惰的二叉树创建了一个类型:
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)
你能告诉我发生了什么吗?单元不被视为论点吗?
答案 0 :(得分:2)
LNode
的参数未按您期望的那样进行解析,它是一个具有两个函数的三元组,而是一对,其中第二项是返回另一对的函数。至少在中间函数周围使用括号,但最好还是在两者之间使用括号以保持一致,以使您的意图明确:
let exlBST = LNode (3, (function () -> LEmpty), (function () -> LEmpty));;
不幸的是,使用OCaml语法的这些奇怪的解析边缘情况/歧义中有一些。您将学会及时处理它,但是一个好的经验法则是:如果有疑问,请使用括号(或在适当的时候使用begin
/ end
)