我的功能中的非详尽模式

时间:2014-04-07 21:09:53

标签: haskell

以下函数编译但运行时输出非穷举模式错误

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可以为零?

1 个答案:

答案 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

作为如何在列表上匹配的快速目录,

  1. 完全忽略它们,一如既往_忽略值
  2. 与任何变量匹配,例如,模式xs将与任何列表
  3. 绑定
  4. 匹配头尾,(x:xs)会将第一个元素绑定到x并停留到xs
  5. 匹配元素[x, y, z ...],这只是x : y : z .... : []
  6. 的糖
相关问题