如何检查 Haskell 中自定义数据类型列表的长度?

How can I check that the length of a list of custom data types in Haskell?

我正在制作一个仅使用 9 x 9 网格的简单数独程序。为此,我有一个功能来检查它是 9 x 9,还检查以确保输入的值是 Just Num

这是我找到的最接近的解决方案,我认为问题出在我认为的模式匹配中(如果我错了请纠正我),这是因为它编译但有返回的逻辑错误当给定一个完美的测试用例时,错误不是正确的。无论如何,这是代码转储:D

type Cell = Maybe Int
type Row  = [Cell]

data Sudoku = Sudoku [Row]
 deriving ( Show, Eq )

rows :: Sudoku -> [Row]
rows (Sudoku ms) = ms

isSudoku :: Sudoku -> Bool
isSudoku (Sudoku [[cs]]) = length [cs] == 9 && length cs == 9
isSudoku (Sudoku _)      = False

非常感谢您提供的任何建议!

[x] 作为一种模式只会匹配单例列表(列表中只有一个元素)。

要执行嵌套列表检查,请执行

isSudokuList cs  =  length cs == ...    &&
                      and [length c == ... | c <- cs]

当然,您必须对其进行调整以适合您的类型。

你也可以定义

niner [a,b,c,d,e,f,g,h,i] = True
.......

并使用