Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 哪种模式与1x1矩阵匹配?_List_Haskell_Matrix_Pattern Matching - Fatal编程技术网

List 哪种模式与1x1矩阵匹配?

List 哪种模式与1x1矩阵匹配?,list,haskell,matrix,pattern-matching,List,Haskell,Matrix,Pattern Matching,我正在写一个谓词来检查矩阵是否是(正方形)下三角形 如果第一行的所有元素(索引0处的元素除外)都为零,则的想法是返回true,然后再次调用子矩阵上的谓词,不包括1行和1列。当子矩阵只有1个数字(例如,[[x]])时,递归应该结束,这当然是下三角 问题:如何匹配[[x]],其中x只是一个数字 lowertriangular (???) = True lowertriangular (x:xs) = all (==0) (tail x) && lowertriangular (map

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

如果第一行的所有元素(索引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的[[[u]]。

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

lowertriangular [[_]] = True
使用1x1矩阵调用时将返回true


但是应该注意的是,1x1矩阵已经由case
lowertriangular(x:xs)=……
完美地处理过了,因此您不需要显式地处理它们。您需要处理的是一个空列表的情况,如下所示:

lowertriangular [] = True

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

lowertriangular [[_]] = True
使用1x1矩阵调用时将返回true


但是应该注意的是,1x1矩阵已经由case
lowertriangular(x:xs)=……
完美地处理过了,因此您不需要显式地处理它们。您需要处理的是一个空列表的情况,如下所示:

lowertriangular [] = True

也许这就是你想要的:

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

也许这就是你想要的:

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

@sepp2k:不,如果我使用[[\u]]我会得到“函数Lowertriangular中的非穷举模式”。@Gremo:之所以会这样,是因为你没有匹配列表为空的情况(即0x0矩阵)。但是你的问题是如何处理1x1矩阵,这就是答案。格雷莫:那可能是因为你的内部列表中除了一个元素之外还有其他元素(你只匹配一个元素列表)。sepp2k的答案仍然有效,但您还有其他问题。@sepp2k:请参阅第一篇文章中我的编辑。什么时候应该用空矩阵调用lowertriangular?@Gremo:对不起,我没在想。您需要处理的是一个包含空列表的列表的情况。@sepp2k:nope,如果我使用[[\u]]我会得到“函数lowertriangular中的非穷举模式”。@Gremo:您得到它是因为您不匹配列表为空的情况(即0x0矩阵)。但是你的问题是如何处理1x1矩阵,这就是答案。格雷莫:那可能是因为你的内部列表中除了一个元素之外还有其他元素(你只匹配一个元素列表)。sepp2k的答案仍然有效,但您还有其他问题。@sepp2k:请参阅第一篇文章中我的编辑。什么时候应该用空矩阵调用lowertriangular?@Gremo:对不起,我没在想。您需要处理的是得到一个包含空列表的列表的情况。在这个实现中,调用
lowertriangular[[1,0,0],[1,1,0,0],[1,1,1,0],[1,1,1,1],[1,1,1,1]。
会导致
True
,而调用,e。g、 ,
lowertriangular[[1,0,0,0],[1,1,0,1],[1,1,1,0],[1,1,1],[1,1,1,1],
结果为'False
,因为第二行的最后一个元素是
1`(不是零)。当使用空矩阵调用时,它返回
False
。@sepp2k:您的
[]:xs
不是与现在的
x:[]
相同吗?:-/@sepp2k:我是从实际的角度考虑这个问题的:-)没关系。在这个实现中,调用
lowertriangular[[1,0,0],[1,1,0,0],[1,1,1,0],[1,1,1,1],[1,1,1,1],[1,1,1],[code>会导致
True
,而调用e。g、 ,
lowertriangular[[1,0,0,0],[1,1,0,1],[1,1,1,0],[1,1,1],[1,1,1,1],
结果为'False
,因为第二行的最后一个元素是
1`(不是零)。当使用空矩阵调用时,它返回
False
。@sepp2k:您的
[]:xs
不是与现在的
x:[]
相同吗?:-/@sepp2k:我是从实际的角度考虑这个问题的:-)没关系。