哪种模式匹配1x1矩阵?

时间:2011-02-03 16:51:45

标签: list haskell matrix pattern-matching

我正在编写一个谓词来检查矩阵是否为(正方形)下三角

如果第一个行的所有元素(索引0处的元素除外)全部为零,想法将返回 true ,并且然后再次调用子矩阵获得的排除 1行和1列的谓词。当子矩阵只有1个数字(例如[[x]])时,递归应该结束,当然这个数字是低三角形。

问题:如何匹配[[x]],其中x只是一个数字?

lowertriangular (???) = True
lowertriangular (x:xs) = all (==0) (tail x) && lowertriangular (map tail xs)

修改

m = [[1,0,0],[2,-3,0],[4,5,6]]

lt m = all (==0) [0, 0] && lt [[-3, 0], [5, 6]]
     = all (==0) [0, 0] && (all (==0) [0] && lt [6])

lt [6]应匹配返回True的[[_]]。

2 个答案:

答案 0 :(得分:5)

您可以使用模式[[x]] - 或[[x]]匹配[[_]],因为您实际上并不关心x的值。即。

lowertriangular [[_]] = True
使用1x1矩阵调用时,

将返回true。


然而,应该注意的是1x1矩阵已经由lowertriangular (x:xs) = ...完美处理,因此您无需明确处理它们。您需要处理的是获得空列表的情况,如下所示:

lowertriangular [] = True

答案 1 :(得分:1)

也许这就是你要找的东西:

lowertriangular (x:[]) = True
lowertriangular (x:xs) = all (==0) (tail x) && lowertriangular (map tail xs)