我使用返回元组的函数。但是当我试图运行这个函数时,它给了我一个例外:函数中的非穷尽模式。
buildTree' :: String -> Tree -> (String,Tree)
buildTree' (x:xs) currenttree
|null (x:xs) = ("empty", currenttree)
|isDigit x && ( take 1 xs == ['+'] || take 1 xs == ['-'])= buildTree' xs (Node [x] Empty Empty)
|isDigit x = buildTree' newstring1 (snd (buildrecursion (getminiexpr(x:xs)) Empty))
|elem x "+-" = buildTree' newstring (buildTree2 currenttree newtree [x])
where newtree = (snd (buildrecursion (getminiexpr xs) Empty))
newstring = drop (length(getminiexpr xs)) xs
newstring1 = drop (length(getminiexpr (x:xs))) (x:xs)
getminiexpr :: String -> String
getminiexpr input = takeWhile ( \y -> y /= '+' && y /= '-') input
(x:xs)
不是任意列表/字符串,它是一个非空列表/字符串,其头是x
,尾是xs
。因此
buildTree' (x:xs) currenttree
...
只处理非空列表。使用-wall
编译会警告缺少空列表大小写。所以,你需要:
buildTree' [] currenttree = ...
buildTree' (x:xs) currenttree
...
调整您的代码,我们可以删除null
保护:
buildTree' [] currenttree = ("empty", currenttree)
buildTree' (x:xs) currenttree
| isDigit x && ( take 1 xs == ['+'] || take 1 xs == ['-'])= buildTree' xs (Node [x] Empty Empty)
...
类似地,take
检查需要的比列表的头x
更多。你可以改为写:
buildTree' [] currenttree = ("empty", currenttree)
buildTree' (x1:x2:xs) currenttree
| isDigit x1 && ( x2 == '+' || x2 == '-') = buildTree' (x2:xs) (Node [x1] Empty Empty)
...
或者甚至
buildTree' [] currenttree = ("empty", currenttree)
buildTree' (x1:x2:xs) currenttree
| isDigit x1 && (x2 `elem` "+-") = buildTree' (x2:xs) (Node [x1] Empty Empty)
...
我不知道你的逻辑是否正确。
我必须使函数:: [((String, String), Int)]- 这就是我提出的功能: 输出应该是一个元组列表,其中的字符串与元组x1中的inputWord以及整数x2成对出现 问题是我得到了我认为不应该存在的非详尽模式。 我试图替换与 这使得非穷举模式在列表不为空时消失,但也阻止了函数遍历元组的最后一个元组。
我得到了这个例外,有人知道如何摆脱它吗?' ***例外:hw.hs:(33,1)-(35,53):函数船舶中的非详尽模式' 所有函数都工作正常,除了函数。它可能与元组列表的东西,但我不能弄清楚。下面是代码:
我试图编写函数尾部,它将字符串转换成字符串列表,方式如下: 以下是我的实现: 正如标题所暗示的,这个函数中有一些非详尽的模式。不幸的是,我不明白为什么。 我是哈斯克尔的新手。。。任何帮助都将不胜感激!
我的函数使用一个可能是Int的列表作为参数。如果元素=Nothing,则应打印一个。如果元素是一个Just Int,它将打印数字。我以为我抓住了一个基本情况,但我认为我没有抓住正确的一个。。我得到一个非穷举模式错误。 向正确的方向点头表示感谢!:-)
我有一个函数,它想列出所有。 其中t和d是字符串,y是int,f是字符串,r是int(但不确定f和r是否重要,将进一步解释)。 我得到了非穷举模式的错误,并假设这是因为当列表中只有一个元素时,我没有一个,所以我在其他模式之间添加了这个: 它已编译,但当我调用该函数时,它再次告诉我“非穷举模式”。我正在努力思考我错过了什么模式,我应该在之后添加一个通配符模式来捕获所有内容吗?我不想找人把答案打出来,
我正在尝试创建一个函数,该函数将元组列表作为参数,并按第二个元素排序。它不打印任何其他内容,只打印错误“***Exception:main”。hs:20:1-76:函数sortWords中的非穷举模式’以下是代码: 下面是我如何调用函数的 我得说我是在计算机上运行我的程序的http://Repl.it网站 谢谢!