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

  • 本文关键字:一行 具有一 是否 haskell
  • 更新时间 :
  • 英文 :

type Matrix = [[Rational]]

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

我正在尝试测试矩阵是否至少有一行和一列,以及是否所有行的长度都相同,但是当我在终端中输入"有效 [[]]"时,它会输出为 true。这句话有问题吗?

我假设uniform正在检查列表中的所有元素是否相同。在xs = [[]]的情况下,[length x | x <- xs]的结果将是[0]这是一个所有元素都相同的列表。

因此,您缺少列表元素实际上大于 1 的检查。由于您已经检查了所有元素是否相同,因此您只需检查第一个元素是否至少为 1。

请注意,您可能需要考虑条件的顺序。只有在确定列表中至少有一个元素后,才应检查列表的第一个元素的属性。否则,如果输入[],则可能会收到错误。

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

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

相关内容

最新更新