繁体   English   中英

如何检查 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的。

这是我找到的最接近的解决方案,我认为问题出在我认为的模式匹配中(如果我错了,请纠正我),这是因为它可以编译但存在逻辑错误,即在给出时返回 False not True一个完美的测试用例。 无论如何,这是代码转储: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
.......

并使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM