我为懒惰的二叉树创建了一个类型:
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
)