我正在编写一个谓词来检查矩阵是否为(正方形)下三角。
如果第一个行的所有元素(索引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的[[_]]。
答案 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)