【发布时间】:2020-02-22 07:50:11
【问题描述】:
我正在尝试将 Huffman 树和位流转换为字符列表以及指示输出是否消耗所有输入位的布尔值。这是一个例子:
decode xyz_code [True,False,True,True,True,False,False,True] =
("yzyx",False)
这是我目前所拥有的,但它不起作用。怎么了?救命!
data BTree a = Leaf a | Fork (BTree a) (BTree a) deriving (Show, Eq)
decode :: BTree a -> [Bool] -> ([a], Bool)
decode _ [] = ([],True)
decode (Leaf v) [bs] = ([v], bs)
decode (Fork left right) (b:bs)
| b = decode right bs
| otherwise = decode left bs
【问题讨论】:
-
编译器认为
decode (Leaf v) [bs]不包含长度≥ 2 的列表。 -
我该如何解决?
-
一般来说,如果它不应该发生,要么将其定义为错误,要么重新排列你的类型,使其永远不存在。
-
你能说得更具体点吗?我不明白出了什么问题,我应该改变什么
标签: haskell recursion functional-programming huffman-code