我正在尝试创建一个使用两个列表的函数。出于某种原因,当我通过时:
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),或者你正在“声明”两个不同的功能并且网格化了。
答案 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
)使用空的第一个参数和非空的第二个参数,您将收到错误。