1

高人,

我必须为可以有多个节点的树定义多态数据类型。每个节点可以有任意数量的子节点和一个值。这种类型总是至少有一个节点。我是 Haskell 的新手,所以我问如何声明节点具有可变数量的参数。

这就是我现在所拥有的。这是一棵树,它可以有一个节点或一个具有值 (a) 的节点和两个子树。而不是两个树孩子,我希望他们成为任意数量的树孩子。(类比为 java 可变参数个数“arg ...”)

data Tree a = Node a | Node a (Tree a) (Tree a) deriving (Show)

谢谢你的帮助

编辑

一个小问题::: 我如何在函数参数(标题/签名)中使用可变参数声明这个节点。我必须实现一个名为
“contains”的函数,它将检查节点是否包含特定元素。

contains :: Tree a -> b -> Bool
contains (Node val [(tree)]) =   ......

第二行正确吗?

4

1 回答 1

4

这将是:

data Tree a = Node a | Node a [(Tree a)] deriving (Show)

但此外还有第二个问题,这应该是

data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)

或者例如联合的部分必须具有不同的名称,否则您将无法使用模式匹配

Leaf并且Branch是数据构造函数:

Branch 1 [Leaf 3, Branch 6 [Leaf 5]]

是一个例子Tree


contains :: Tree a -> a -> Boolean 
contains (Leaf a) b = a == b
contains (Branch a c) b = a == b || any (map (\t -> contains t b) c)

之类的

于 2010-12-03T01:59:05.047 回答