Haskell:功能上的非穷举模式。不知道为什么

时间:2019-11-23 15:01:41

标签: haskell

我正在学习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函数中的非穷尽模式

为什么会这样?

2 个答案:

答案 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!"