以下代码给出了函数sudokuElements中的错误'非详尽模式' ...代码有什么问题?我怎么能纠正它?

时间:2017-02-06 17:25:02

标签: haskell

sudokuElements :: [[BoardElement]] -> [Coords] -> [[BoardElement]]
sudokuElements [[]] _ = [[]]
sudokuElements _ [] = [[]]
sudokuElements ([x]:[[xs]]) (y:[ys])
    | ([x]:[[xs]]) == [inputBoardElements] && (y:[ys]) == inputBoardEmpty =
        [
            (j, i) |
            i <- (validVals [x] y),
            j <- [y]
        ] : sudokuElements [[xs]] [ys]

1 个答案:

答案 0 :(得分:0)

我想您可以通过将sudokuElements _ _ = []添加到定义的 end 来解决此问题,因此:

sudokuElements ([x]:[[xs]]) (y:[ys])
    | ([x]:[[xs]]) == [inputBoardElements] && (y:[ys]) == inputBoardEmpty =
        [
            (j, i) |
            i <- (validVals [x] y),
            j <- [y]
        ] : sudokuElements [[xs]] [ys]
sudokuElements _ _ = []

对于缺失的模式,请看一下chepners评论,他解释得很清楚:

  

大多数模式都缺失了。例如,从您的第一个等式判断,您似乎认为[[]][[BoardElement]]类型的空列表。它不是;它是一个包含单个空列表的列表。 [][[BoardElement]]类型的空列表,就像任何类型[a]的列表一样(无论是什么)。   我们在这里解决你的家庭作业;)