1

这是一个初学者问题,因为我仍在弄清楚 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 使用正确显示类型并且没有任何构造函数问题时,我也可以将此类型用作方法参数。

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

4

1 回答 1

3

这不起作用的原因是它TreeNode是一种类型,而不是构造函数。您已经定义了一个TreeNode具有单个联合案例的类型,称为N. 为了创建有区别的联合的值,您必须使用其中一个联合案例的名称。在这个例子中,只有一个可以使用 - N

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

更多关于工会的信息可以在这里找到。

于 2014-02-08T15:51:21.617 回答