【发布时间】:2013-04-07 22:16:47
【问题描述】:
我真的是 Haskell 的新手,我正在尝试创建一棵 Huffman 树,但直到最后我才弄清楚如何。
我对树的定义如下:data HuffTree = Node Int HuffTree HuffTree | Leaf (Int, Char)
到目前为止,我有一个函数insTree :: HuffTree -> HuffTree -> HuffTree,它在树中插入一个节点及其子树并返回新树。一个函数makePair :: HuffTree -> HuffTree -> HuffTree,它采用两棵树并生成一棵新树,将原始两棵树作为子树,并将前两棵树中的值的总和作为值。还有一个函数 value :: HuffTree -> Int 从每个节点返回值。
我的问题是函数makeHuffTree :: [(Int, Char)] -> HuffTree 看起来像这样:
makeHuffTree :: [(Int, Char)] -> HuffTree
makeHuffTree lst = merge leafList
where
leafList = map (\ ((x,c)) -> Leaf (x,c)) lst
merge [] = []
merge [t] = [t]
merge (t1 : t2 : tree) = insTree (makePair t1 t2) tree
我知道这是这个功能的问题,但我不知道如何处理它。我得到的错误是这样的:
Couldn't match expected type `[a0]' with actual type `HuffTree'
In the return type of a call of `insTree'
In the expression: insTree (makePair t1 t2) tree
In an equation for `merge':
merge (t1 : t2 : tree) = insTree (makePair t1 t2) tree
你能给出如何解决这个问题的提示吗?
【问题讨论】:
-
你能发布 insTree 和 makePair 函数吗?
标签: haskell tree huffman-code