我的函数使用一个可能是Int的列表作为参数。如果元素=Nothing,则应打印一个。如果元素是一个Just Int,它将打印数字。我以为我抓住了一个基本情况,但我认为我没有抓住正确的一个。。我得到一个非穷举模式错误。
replaceValue :: [Maybe Int] -> String
replaceValue (x:xs)
| (x:xs) == [] = []
| isNothing x == True = '.':replaceValue xs
| isJust x == True = intToDigit(fromJust x):(replaceValue xs)
向正确的方向点头表示感谢!:-)
模式x:xs
仅匹配非空列表。守卫(x:xs)=[]
永远不会成功。
你可能是这个意思:
replaceValue [] = []
replaceValue (x:xs)
| isNothing x = ...
| isJust x = ...
还要注意,…==True
与刚才的结果相同
;-)
@MathematicalArchid已经回答了。
我想补充一点,使用isNothing/isJust/fromJust
会使代码变得更加复杂。此外,fromJust
通常是危险的,因为如果您向它传递Nothing
,它就会崩溃——在这里,您可以使用isJust
防护正确地防止这种情况,但在大型程序中很容易忘记这一点。
好消息是,您可以使用模式匹配来避免所有这些辅助功能:
replaceValue :: [Maybe Int] -> String
replaceValue [] = []
replaceValue (Nothing : xs) = '.' : replaceValue xs
replaceValue (Just a : xs) = intToDigit a : replaceValue xs
一旦您更加熟悉Haskell,您将能够利用一些高阶库函数,以更紧凑的形式重写标准递归方案,如上面的方案。
replaceValue :: [Maybe Int] -> String
replaceValue = map (maybe '.' intToDigit)
所以我有这个函数,当我尝试这样使用它时:mergesortedList[1,1][1,1]会给我一个错误: [1,1***异常:SortFunctions.hs:(86,1)-(91,89):函数合并分类列表中的非穷举模式 我无法找出问题的根源,因为我想我已经涵盖了所有可能的案例。这里会有什么问题?
我试图编写函数尾部,它将字符串转换成字符串列表,方式如下: 以下是我的实现: 正如标题所暗示的,这个函数中有一些非详尽的模式。不幸的是,我不明白为什么。 我是哈斯克尔的新手。。。任何帮助都将不胜感激!
我使用返回元组的函数。但是当我试图运行这个函数时,它给了我一个例外:函数中的非穷尽模式。
我必须使函数:: [((String, String), Int)]- 这就是我提出的功能: 输出应该是一个元组列表,其中的字符串与元组x1中的inputWord以及整数x2成对出现 问题是我得到了我认为不应该存在的非详尽模式。 我试图替换与 这使得非穷举模式在列表不为空时消失,但也阻止了函数遍历元组的最后一个元组。
我得到了这个例外,有人知道如何摆脱它吗?' ***例外:hw.hs:(33,1)-(35,53):函数船舶中的非详尽模式' 所有函数都工作正常,除了函数。它可能与元组列表的东西,但我不能弄清楚。下面是代码:
我有一个函数,它想列出所有。 其中t和d是字符串,y是int,f是字符串,r是int(但不确定f和r是否重要,将进一步解释)。 我得到了非穷举模式的错误,并假设这是因为当列表中只有一个元素时,我没有一个,所以我在其他模式之间添加了这个: 它已编译,但当我调用该函数时,它再次告诉我“非穷举模式”。我正在努力思考我错过了什么模式,我应该在之后添加一个通配符模式来捕获所有内容吗?我不想找人把答案打出来,