在方法上获取非穷尽模式异常

时间:2019-03-28 15:46:09

标签: haskell accumulator non-exhaustive-patterns

以下方法不断出现non-exhaustive pattern异常:

 groups::[Int]->[[Int]]
 groups ls=go ls [] [] where

        go [] small big=small:big
        go (x:xs) (y:ys) big | x==y = go xs (x:y:ys) big
                             | otherwise = go xs [] ((y:ys):big)

我要执行的操作是:给定数组[1,2,3,3,4,4,4,1],我想将其拆分为连续重复的列表:[[1],[2],[3,3],[4,4,4],[1]]

我正在使用2个累加器,一个累加器用于当前的成形列表,另一个用于较大的累加器。

我不能同时将wild-cardbig都不能用于small列表,因为唯一的例外情况是输入列表为空。

1 个答案:

答案 0 :(得分:1)

您尚未考虑类似go (x:xs) [] big之类的问题;唯一允许第二个参数为空列表的情况也要求第一个参数也为空列表。

    go [] small big=small:big
    go (x:xs) (y:ys) big | x==y = go xs (x:y:ys) big
                         | otherwise = go xs [] ((y:ys):big)
    go (x:xs) [] big = ???