以下代码给出错误"函数数独元素中的非穷举模式"...代码有什么问题?我该如何纠正它?


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]
我想

您可以通过在定义末尾添加sudokuElements _ _ = []来解决此问题,因此:

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

对于缺失的模式,请查看切普纳的评论,他解释得很好:

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

最新更新