我是 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
你能提示如何解决这个问题吗?