我的功能中的非详尽模式

Ale*_*lex 1 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 [] [] = []
Run Code Online (Sandbox Code Playgroud)

哪里

type CodeTable = [(Char,[Integer])]
Run Code Online (Sandbox Code Playgroud)

我没有看到错误的来源,我是否必须做2 ^ 4个案例,其中[(x,a)] [(y,b)],x,a,y或b可以为零?

Dan*_*zer 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)
Run Code Online (Sandbox Code Playgroud)

如果匹配,则匹配精确长度为1 [foo]的列表,然后匹配该元素与任何模式.foo

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

  1. 完全忽略它们,因为总是_忽略该值
  2. 与任何变量匹配,xs例如,模式将与任何列表绑定
  3. 匹配头尾,(x:xs)将第一个元素绑定到x并休息xs
  4. 匹配元素 - [x, y, z ...]这只是糖x : y : z .... : []