Syntax 构造函数参数不匹配

Syntax 构造函数参数不匹配,syntax,compiler-errors,ocaml,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),

我已经为惰性二叉树创建了一个类型:

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)

你能告诉我发生了什么事吗?单位不被认为是一个论点吗

LNode
的参数的分析并不像您期望的那样,它是一个三元组,有两个函数,但作为一对,其中第二项是返回另一对的函数。至少在中间函数周围使用括号,但最好同时使用括号以保持一致性,以明确您的意图:

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

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

解析
LNode
的参数并不像你期望的那样,是一个包含两个函数的三元组,而是作为一对,其中第二项是返回另一对的函数。至少在中间函数周围使用括号,但最好同时使用括号以保持一致性,以明确您的意图:

let exlBST = LNode (3, (function () -> LEmpty), (function () -> LEmpty));;
不幸的是,OCaml的语法存在一些奇怪的解析边缘情况/歧义。你将学会及时处理它,但一个好的经验法则是:如果有疑问,请使用括号(或
begin
/
end
,如果合适)