哪种模式匹配1x1矩阵?

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的[[_]].

sep*_*p2k 5

你可以[[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)

  • @Gremo:你得到的是因为你不匹配列表为空的情况(即0x0矩阵).但是你的问题是如何处理1x1矩阵,这就是答案. (4认同)