我正在学习Haskell,并且正在尝试实现luhn算法。
我创建了一个辅助函数:
AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
faceNode.setLocalPosition(new Vector3(0.0f,5.1f,0.0f));
此功能正常工作。如果我尝试以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]
,这是预期的结果。
比起我正在尝试实现luhn算法:
[2,2,6,4]
这是算法的一部分,我将其更改为返回luhn :: [Int] -> [Int]
luhn [x] = myMap (*2) (+0) [x]
,但我正在尝试按原样运行,它给了我:
***例外:main.hs:92:1-30:luhn函数中的非穷尽模式
为什么会这样?
答案 0 :(得分:1)
谢谢大家,真是愚蠢的错误。
luhn :: [Int] -> [Int]
luhn x = myMap (*2) (+0) x
这是实现功能的正确形式。我不知道为什么要放luhn [x] = myMap (*2) (+0) [x]
。
通过这种方式现在可以正常工作。
答案 1 :(得分:0)
例如luhn []
是什么?
您的函数当前是为一个元素的列表定义的。那其他列表呢?
可以是:
luhn [x] = your code
luhn whatever_else = error "That's an error!"