【发布时间】:2014-09-26 07:16:04
【问题描述】:
我正在为明天的测试进行培训,以完成我对函数式编程的介绍,但有一件事我不明白。
每当我有这样的程序时:
test [] = []
test (x:xs) = test (xs)
他所做的是从列表中取出第一个元素并继续其余的。只要只剩下一个,xs 就应该是[],这反过来又会触发test [] = []。但是每当我运行这个算法时,我都会得到一个错误。 Exception: <interactive>:20:5-16: Non-exhaustive patterns in function test.
我在网上找不到明确的解释。有人可以给我一个链接,其中解释清楚或向我解释吗?
【问题讨论】:
-
很奇怪。您发布的代码 sn-p 不包含非详尽的模式。
-
只是在黑暗中拍摄:您是否可能试图将这个定义输入到 ghci 中?如果是这样,您应该使用单个 let 语句:
let test [] = [] ; test (x:xs) = test xs。 -
是的,这就是我正在做的。非常感谢。我已经开始吓坏了,因为我花了整整一周时间编写递归,但我不明白为什么这个不起作用。
-
就个人而言,我更喜欢在文件中编写代码并加载到 ghci 中。这是一个很好的例子,说明了为什么你应该这样做。它会通过一个不明显的解决方案来避免这个问题。
标签: haskell ghci non-exhaustive-patterns