在haskell中映射和压缩树

时间:2014-11-23 10:02:28

标签: haskell tree

我试图了解树木中的标签,但我无法理解。这是我的树的Datentyp:

data Tree = Node (Label -> Label) Label [Tree]  
type Label = Int

我真的不明白,(Label - > Label)和Label之间有什么区别? 我怎样才能从这些函数中得到正确的结果?

    tcm :: (Label -> Bool) -> (Label -> Label) -> Tree -> Tree  
    tzp :: (Label -> Label -> Label) -> Tree -> Tree -> Tree
    tmax :: Label -> Tree -> (Label -> Label)

以下是树和类似函数的不同datentyp的示例树和类似示例:

t1 = Null
t2 = Tree 2 (Tree 3 Null Null) (Tree 5 Null Null)
t3 = Tree 2 (Tree 3 (Tree 5 Null Null) Null) (Tree 7 Null Null)

data Tree = Null | Tree Label Tree Tree deriving (Eq,Show)
type Label = Integer

但是在我的例子中,树是空的还是什么?

tcm :: (Label -> Label) -> Tree -> Tree
tzp :: (Label -> Label -> Label) -> Tree -> Tree -> Tree

tcm (+1) t1 == Null
tcm (+1) t2 == Tree 3 (Tree 4 Null Null) (Tree 6 Null Null)
tcm (+1) t3 == Tree 3 (Tree 4 (Tree 6 Null Null) Null) (Tree 8 Null Null)

tzp (+) t1 t2 == Null
tzp (+) t2 t3 == Tree 4 (Tree 6 Null Null) (Tree 12 Null Null)

有人可以帮助我使用这些功能和树吗?

1 个答案:

答案 0 :(得分:1)

(Label - > Label)和Label之间的区别在于前者是一个函数,在给定Label的情况下,它产生一个新的Label。

关于你的下一个问题:在第一个Tree数据类型中,树确实不能为Null,因为您的数据类型定义不允许这样做。

除此之外,您已使用二叉树标记标记了您的问题,但您希望澄清的数据类型不是二叉树的数据类型,因为列表的长度可能不同。