haskell 检查矩阵是否至少有一列和一行

7nbnzgx9  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(107)
type Matrix = [[Rational]]

valid :: Matrix -> Bool
valid xs = uniform [length x | x <- xs] && length xs >= 1

我试着测试一个矩阵是否至少有一行和一列,并且所有行的长度是否相同,但是当我在终端中输入“valid ”时,它输出为true。该语句有什么问题吗?

aurhwmvo

aurhwmvo1#

我假设uniform正在检查列表中的所有元素是否都相同。在xs = [[]]的情况下,[length x | x <- xs]的结果将是[0],这是一个所有元素都相同的列表。
因此,您忽略了检查列表元素是否实际大于1。由于您已经检查了所有元素是否相同,因此您只需要检查第一个元素是否至少为1。
请注意,您可能需要考虑条件的顺序。只有在确定列表中至少有一个元素时,才应该检查列表中第一个元素的属性。否则,如果给予[],可能会出错。

djmepvbi

djmepvbi2#

您可以使用模式匹配来检查列表是否至少有一行,以及第一行是否至少有一列具有:

valid :: Matrix -> Bool
valid xs@((_:_):_) = uniform (map length xs)
valid _ = False

相关问题