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

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)

08-05 05:43