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]
这是预期的结果。
比我尝试实现 luhn 算法:
luhn :: [Int] -> [Int]
luhn [x] = myMap (*2) (+0) [x]
这是算法的一部分,我将其更改为返回 a Bool
,但我正在尝试按原样运行,它给了我:
*** 例外:main.hs:92:1-30:函数 luhn 中的非详尽模式
为什么会这样?
解决方案
谢谢大家,真是愚蠢的错误。
luhn :: [Int] -> [Int]
luhn x = myMap (*2) (+0) x
这是实现该功能的正确形式。我不知道我为什么放luhn [x] = myMap (*2) (+0) [x]
.
这样它现在就可以工作了。
推荐阅读
- cordova - Cordova Plugin inappbrowser : 如何在 Cordova Webview 中使用 Cordova?
- python - 使用枕头创建和编辑图像,给出错误“属性访问”
- r - 如何使用逻辑语句添加新列
- maven - Windows 10 WSL - Maven 配置
- javascript - 如何在pyvis python网络图中插入图像?
- python - Is there a way to examine how much memory an image is occupying with python?
- python - Scrapy - xpath with a regular expression
- path - 为什么我在 Tableau 中输入时间时路径会消失
- java - 如何打印序列一个 1,然后是两个 2,三个 3,... n ns?
- javascript - Why can't I access properties directly within this object?