为什么我会得到“功能上的非详尽模式”?

时间:2014-07-24 18:17:56

标签: haskell pattern-matching

在下面的代码中,Haskell抱怨

Non-exhaustive patterns in function prime'
prime :: Int -> [Int]
prime x = prime' [2..x] where
  prime' (p:ps)= p : prime' [x | x <- ps, mod x p > 0 && prime'' x [2..div x 2]]     
  prime'' _ [] = True
  prime'' n (x:xs)
    | mod n x == 0 = False
    |    otherwise = prime'' n xs

prime' []=[]

我找不到自己的错误。有人可以解释为什么会发生这种情况,这意味着什么?

1 个答案:

答案 0 :(得分:6)

压痕。最后一行定义了名为prime'另一个函数。因此,prime\prime'prime的where子句中的定义)不具有空列表的匹配模式。

此外,你的缩进遍布各地。你还mix tabs and spaces吗?