首页 > 解决方案 > 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]这是预期的结果。

比我尝试实现 luhn 算法:

luhn :: [Int] -> [Int]
luhn [x] = myMap (*2) (+0) [x]

这是算法的一部分,我将其更改为返回 a Bool,但我正在尝试按原样运行,它给了我:

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

为什么会这样?

标签: haskell

解决方案


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

luhn :: [Int] -> [Int]
luhn x = myMap (*2) (+0) x

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

这样它现在就可以工作了。


推荐阅读