gre*_*emo 1 haskell list matrix pattern-matching
我正在编写一个谓词来检查矩阵是否是(正方形)下三角形.
该想法是返回真,如果的所有元素第一行(除了在索引0处的元素)都为零,然后再次调用该谓词子矩阵获得不含 1行和1列.当子矩阵只有1个数字(例如[[x]])时,递归应该结束,这当然是低三角形.
问题:如何匹配[[x]],其中x只是一个数字?
lowertriangular (???) = True
lowertriangular (x:xs) = all (==0) (tail x) && lowertriangular (map tail xs)
Run Code Online (Sandbox Code Playgroud)
编辑:
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])
Run Code Online (Sandbox Code Playgroud)
lt [6]应匹配返回True的[[_]].
你可以[[x]]使用模式进行匹配[[x]]- 或者[[_]]因为你实际上并不关心它的价值x.即
lowertriangular [[_]] = True
Run Code Online (Sandbox Code Playgroud)
使用1x1矩阵调用时将返回true.
但是应该注意的是,1x1矩阵已经完全由案例处理lowertriangular (x:xs) = ...,因此您无需明确处理它们.您需要处理的是获得空列表的情况,如下所示:
lowertriangular [] = True
Run Code Online (Sandbox Code Playgroud)