F#Tree Puzzle - 找不到值或构造函数“TreeNode”

时间:2014-02-08 15:32:56

标签: f# compiler-errors tree discriminated-union

这是一个初学者的问题,因为我仍然在弄清楚F#编译器错误的含义以及如何修复它们。

我有以下F#代码 - 并且无法理解为什么它不起作用。它基于此处的解决方案:F#: Recursive collect and filter over N-ary Tree

module TreeProblem_Solution1 =

    type TreeNode =
        | N of int * TreeNode list

    let rec filterTree (t : TreeNode) (predicate : int -> bool) =
       ()

    let test =
        TreeNode(1,[TreeNode(2,[])])

我得到的错误是在 TreeNode (1,[TreeNode(2,[])])下。我不明白为什么这会导致问题,当嵌套的TreeNode用法正确显示类型并且没有任何构造函数问题时,我也可以使用此类型作为方法参数。

希望有人可以对此有所了解,因为我缺少一些重要的见解。

1 个答案:

答案 0 :(得分:3)

这不起作用的原因是TreeNode是一个类型,而不是构造函数。您已使用名为TreeNode的单个联合案例定义了类型N。要创建Discriminated Union的值,您必须使用其中一个联合案例的名称。在此示例中,只有一个要使用 - N

let test = N(1, [N(2, [])])

有关工会的更多信息,请here