以下函数编译但运行时输出非穷举模式错误
hufMerge :: CodeTable -> CodeTable -> CodeTable
hufMerge [(x,a)] [(y,b)] = foldr (:) (map add0 [(x,a)]) (map add1 [(y,b)])
hufMerge [(x,a)] [] = map add0 [(x,a)]
hufMerge [] [(y,b)] = map add1 [(y,b)]
hufMerge [] [] = []
,其中
type CodeTable = [(Char,[Integer])]
我没有看到错误的来源,我是否需要做2 ^ 4个案例,其中[(x,a)] [(y,b)],x,a,y或b可以为零?
答案 0 :(得分:7)
我相信你的意思
hufMerge :: CodeTable -> CodeTable -> CodeTable
hufMerge [] [] = []
hufMerge xs [] = map add0 xs
hufMerge [] ys = map add1 ys
hufMerge xs ys = foldr (:) (map add0 xs) (map add1 ys)
如果您在[foo]
上匹配,则匹配完全长度为一的列表,然后在该一个元素上匹配任何模式foo
。
作为如何在列表上匹配的快速目录,
_
忽略值xs
将与任何列表(x:xs)
会将第一个元素绑定到x
并停留到xs
[x, y, z ...]
,这只是x : y : z .... : []