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 是什么(。 我们在这里解决您的家庭作业吗;)