高人,
我必须为可以有多个节点的树定义多态数据类型。每个节点可以有任意数量的子节点和值。此类型始终至少有一个节点。我是Haskell的新手,所以我问我怎么能声明节点有可变数量的参数。
这就是我现在所拥有的。这是一棵树,可以有一个节点或一个带有值(a)的节点和两个树子节点。而不是两个树儿,我希望他们成为任何数量的树儿。 (Analoog作为java变量数量的参数“arg ...”)
data Tree a = Node a | Node a (Tree a) (Tree a) deriving (Show)
感谢您的帮助
修改
一个小问题:::我如何在函数中使用变量参数声明此节点
参数(报头/签名)。我必须实现一个名为
的函数
“contains”将检查Node是否包含特定元素。
contains :: Tree a -> b -> Bool
contains (Node val [(tree)]) = ......
第二行是否正确?
答案 0 :(得分:4)
它将是:
data Tree a = Node a | Node a [(Tree a)] deriving (Show)
但另外还有第二个问题,那应该是
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
或者诸如union的部分必须具有不同的名称,否则您将无法使用模式匹配
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)
或者这样的