行列が(正方形)下の三角形であるかどうかを調べる述語を書いています。1x1マトリックスに一致するパターンはどれですか?
考えは(インデックス0の要素を除く)第行のすべての要素がすべてゼロであり、その後、が得サブマトリクスに再度述語を呼び出す場合真を返すことです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を返すこと[_]と一致しなければなりません。
:いいえ、私は使用している場合[ [_]]私は "関数lowertrinagularで非網羅的なパターン"を取得します。 – gremo
@Gremo:リストが空の場合(つまり0x0行列)と一致しないため、これを取得します。しかし、あなたの質問は、1x1行列を扱う方法であり、これがその答えです。 – sepp2k
Gremo:これはおそらく、内側のリストに1つの要素のほかに何かがあるからです(あなたは1つの要素のリストのリストに一致しています)。 sepp2kの答えはまだ有効ですが、他にも問題があります。 –