当我遇到所有可能的情况时,我会不断获得“功能中的非详尽模式isPermutation”?

时间:2013-10-07 16:27:43

标签: haskell permutation

我正在尝试创建一个使用两个列表的函数。出于某种原因,当我通过时:

isPermutation [] [],或[] [1,2,3]或[1,2,3] [] - 我在功能isPermutation

中获得了非详尽的模式
isPermutation :: (Eq a)=>[a]->[a]->Bool
**isPermutaiton** [] [] = True
**isPermutaiton** [] ys = False
**isPermutation** xs [] = False
isPermutation (x:xs) (ys) = True

我无法弄清楚为什么我得到这个因为我覆盖了所有情况!

更新 * 感谢Chris Taylor: - 这是一个简单的拼写错误。我拼错了我的一个函数名称“isPermutaiton”而不是“isPermutation”*

小心你的拼写,因为Haskell不会意识到你的意思是相同的功能(duh),或者你正在“声明”两个不同的功能并且网格化了。

1 个答案:

答案 0 :(得分:2)

你的第二和第三行有一个拼写错误 - isPermutaiton而不是isPermutation

您已经有效地定义了

foo [] [] = True       -- both arguments empty
foo [] ys = False      -- first argument empty, second argument anything

bar  xs    [] = False  -- second argument empty, first argument anything
bar (x:xs) ys = True   -- first argument at least one element, second anything

因此,每当您使用非空的第一个参数调用foo(即isPermutaiton)时,您将收到错误,并且每当您致电bar时(即isPermutation)使用空的第一个参数和非空的第二个参数,您将收到错误。