Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:函数中的非穷举模式。不知道为什么_Haskell - Fatal编程技术网

Haskell:函数中的非穷举模式。不知道为什么

Haskell:函数中的非穷举模式。不知道为什么,haskell,Haskell,我正在学习Haskell,并尝试实现luhn算法 我创建了一个助手函数: myMap :: (a -> b) -> (a -> b) -> [a] -> [b] myMap p q [] = [] myMap p q [x] = [p x] myMap p q (x : y : xs) = p x : q y : myMap p q xs 此函数工作正常。如果我尝试以myMap(*2)(+0)[1,2,3,4]的形式运行它,它将返回[2,2,6,4],这是预期的结

我正在学习Haskell,并尝试实现luhn算法

我创建了一个助手函数:

myMap :: (a -> b) -> (a -> b) -> [a] -> [b]
myMap p q [] = []
myMap p q [x] = [p x]
myMap p q (x : y : xs) = p x : q y : myMap p q xs
此函数工作正常。如果我尝试以
myMap(*2)(+0)[1,2,3,4]
的形式运行它,它将返回
[2,2,6,4]
,这是预期的结果

然后我尝试实现luhn算法:

luhn :: [Int] -> [Int]
luhn [x] = myMap (*2) (+0) [x]
这是算法的一部分,我会将其更改为返回一个
Bool
,但我尝试按此方式运行,它会给出:

***例外:main.hs:92:1-30:函数luhn中的非穷举模式


为什么会发生这种情况?

例如,luhn[]会是什么

您的函数当前是为一个元素列表定义的。其他名单呢

它可以是:

luhn [x] = your code
luhn whatever_else = error "That's an error!"

谢谢大家,真是愚蠢的错误

luhn :: [Int] -> [Int]
luhn x = myMap (*2) (+0) x
这是实现该功能的正确形式。我不知道为什么我把luhn[x]=myMap(*2)(+0)[x]


这种方式现在起作用了。

你的意思是说这只适用于单身人士列表吗?或者你的意思是它适用于所有的列表:例如,
luhn xs=myMap(*2)(+0)xs
,这反过来又可以简化为
luhn=myMap(*2)(+0)
(我更愿意写
id
,而不是
(+0)
,但这没有区别)。不确定这是你犯的错误,但一个常见的误解是模式
[x]
将匹配一个列表(与其他类型的值相反),并将其绑定到
x
,而不是匹配包含单个元素的列表。