0

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

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),或者您正在“声明”两个不同的功能,其中包含网格。

4

1 回答 1

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(ie ) 时,您都会得到一个错误,而每当您使用一个空的第一个参数和一个非空的第二个参数调用 (ie ) 时,您都会得到一个错误。isPermutaitonbarisPermutation

于 2013-10-07T16:30:41.847 回答