Haskell 函数中带有“otherwise”的非详尽模式
Haskell non-exhaustive patterns in function with `otherwise`
我正在使用以下功能:
combinations :: Int -> [a] -> [[a]]
combinations k xs = combinations' (length xs) k xs
where combinations' n k' l@(y:ys)
| k' == 0 = [[]]
| k' >= n = [l]
| null l = []
| otherwise = Prelude.map (y :) (combinations' (n - 1) (k' - 1) ys) ++ combinations' (n - 1) k' ys
对于我能想出的几乎所有示例,它都工作得很好,但是当我从我的大型项目中的其他函数调用它时,在某些情况下我会遇到异常:
Exception: projekt.hs:(34,9)-(38,108): Non-exhaustive patterns in function combinations'
上面的定义有问题吗?它缺少一些案例吗?我认为 otherwise
可以处理任何不属于之前案例的事情。
因为 l@(x:xs)
在 combinations' n k' l@(y:ys)
中你漏掉了 combinations _ _ []
.
守卫 null l
永远是 False
。
我正在使用以下功能:
combinations :: Int -> [a] -> [[a]]
combinations k xs = combinations' (length xs) k xs
where combinations' n k' l@(y:ys)
| k' == 0 = [[]]
| k' >= n = [l]
| null l = []
| otherwise = Prelude.map (y :) (combinations' (n - 1) (k' - 1) ys) ++ combinations' (n - 1) k' ys
对于我能想出的几乎所有示例,它都工作得很好,但是当我从我的大型项目中的其他函数调用它时,在某些情况下我会遇到异常:
Exception: projekt.hs:(34,9)-(38,108): Non-exhaustive patterns in function combinations'
上面的定义有问题吗?它缺少一些案例吗?我认为 otherwise
可以处理任何不属于之前案例的事情。
因为 l@(x:xs)
在 combinations' n k' l@(y:ys)
中你漏掉了 combinations _ _ []
.
守卫 null l
永远是 False
。