行列(正方行列)が主対角線に対して対称であるかどうかを決定する述語を定義します。述語は次のようになります。ここで、Zは主対角線に対して対称な行列(正方行列)です。
対称(Z)
アイデアは、行と列が等しいことを確認することですが、エクササイズを上げる方法がわかりません...
行列(正方行列)が主対角線に対して対称であるかどうかを決定する述語を定義します。述語は次のようになります。ここで、Zは主対角線に対して対称な行列(正方行列)です。
対称(Z)
アイデアは、行と列が等しいことを確認することですが、エクササイズを上げる方法がわかりません...
symmetrical(Z) :-
transpose(Z,Z).
これで、転置を定義するだけで済みます。
古き良き行列I、Jの索引付け:
symmetrical(M) :-
forall(elem(M, I, J, E), elem(M, J, I, E)).
elem(M, I, J, E) :-
nth1(I, M, R),
nth1(J, R, E).
テスト:
?- symmetrical([[a,b],[b,a]]).
true.
?- symmetrical([[a,b],[a,b]]).
false.
@gusbroのコメントを見る前にこれを書いたのですが、まさに彼が提案したものです...