当前位置: 首页 > 知识库问答 >
问题:

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

呼延凌
2023-03-14

我正在学习哈斯克尔,并试图实现卢恩算法

我创建了一个助手函数:

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,但我尝试按此方式运行,它会给出:

***例外情况:主要。hs:92:1-30:函数luhn中的非穷举模式

为什么会这样?

共有2个答案

冯宪
2023-03-14

例如,luhn[]是什么?

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

它可以是:

luhn [x] = your code
luhn whatever_else = error "That's an error!"
戎高爽
2023-03-14

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

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

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

这样它就可以工作了。

 类似资料:
  • 我必须使函数:: [((String, String), Int)]- 这就是我提出的功能: 输出应该是一个元组列表,其中的字符串与元组x1中的inputWord以及整数x2成对出现 问题是我得到了我认为不应该存在的非详尽模式。 我试图替换与 这使得非穷举模式在列表不为空时消失,但也阻止了函数遍历元组的最后一个元组。

  • 我试图编写函数尾部,它将字符串转换成字符串列表,方式如下: 以下是我的实现: 正如标题所暗示的,这个函数中有一些非详尽的模式。不幸的是,我不明白为什么。 我是哈斯克尔的新手。。。任何帮助都将不胜感激!

  • 所以我有这个函数,当我尝试这样使用它时:mergesortedList[1,1][1,1]会给我一个错误: [1,1***异常:SortFunctions.hs:(86,1)-(91,89):函数合并分类列表中的非穷举模式 我无法找出问题的根源,因为我想我已经涵盖了所有可能的案例。这里会有什么问题?

  • 我有一个函数,它想列出所有。 其中t和d是字符串,y是int,f是字符串,r是int(但不确定f和r是否重要,将进一步解释)。 我得到了非穷举模式的错误,并假设这是因为当列表中只有一个元素时,我没有一个,所以我在其他模式之间添加了这个: 它已编译,但当我调用该函数时,它再次告诉我“非穷举模式”。我正在努力思考我错过了什么模式,我应该在之后添加一个通配符模式来捕获所有内容吗?我不想找人把答案打出来,

  • 我使用返回元组的函数。但是当我试图运行这个函数时,它给了我一个例外:函数中的非穷尽模式。

  • 我正在尝试创建一个函数,该函数将元组列表作为参数,并按第二个元素排序。它不打印任何其他内容,只打印错误“***Exception:main”。hs:20:1-76:函数sortWords中的非穷举模式’以下是代码: 下面是我如何调用函数的 我得说我是在计算机上运行我的程序的http://Repl.it网站 谢谢!