このディレクトリの索引

'行列Aと行列Bの積の結果、新たにできる行列Cの第i行第j列の要素は、行列Aの第i行のすべての要素と、行列Bの第j列のすべての要素とを、順番に掛け合わせたものの和で定義されます。'(_行列A,_行列B,_行列C) :-
        行列の積(_行列A,_行列B,_行列C).

行列の積(_行列A,_行列B,_行列C) :-
        行列の転置(_行列B,_転置行列B),
        行列Aと行列Bの転置行列から行列Cの各行を構成する(_行列A,_転置行列B,_行列C).

行列Aと行列Bの転置行列から行列Cの各行を構成する([],_,[]) :- !.
行列Aと行列Bの転置行列から行列Cの各行を構成する([_行列Aのi行|R1],_転置行列B,[_行列Cのi行|R3]) :-
        行列Aのi行に行列Bの各列を順に掛け合わせて行列Cのi行を作る(_行列Aのi行,_転置行列B,_行列Cのi行),
        行列Aと行列Bの転置行列から行列Cの各行を構成する(R1,_転置行列B,R3).

行列Aのi行に行列Bの各列を順に掛け合わせて行列Cのi行を作る(_,[],[]) :- !.
行列Aのi行に行列Bの各列を順に掛け合わせて行列Cのi行を作る(_行列Aのi行,[_行列Bのj列|R2],[_行列Cのi行j列|R3]) :-
        行列Aのi行と行列Bのj列を順番に掛け合わせたものの和が行列Cのi行j列である(_行列Aのi行,_行列Bのj列,_行列Cのi行j列),
        行列Aのi行に行列Bの各列を順に掛け合わせて行列Cのi行を作る(_行列Aのi行,R2,R3).

行列Aのi行と行列Bのj列を順番に掛け合わせたものの和が行列Cのi行j列である([],[],0) :- !.
行列Aのi行と行列Bのj列を順番に掛け合わせたものの和が行列Cのi行j列である([_行列Aのi行の順の要素値|R1],[_行列Bのj列の順の要素値|R2],_和) :-
        _和_1 is _行列Aのi行の順の要素値 * _行列Bのj列の順の要素値,
        行列Aのi行と行列Bのj列を順番に掛け合わせたものの和が行列Cのi行j列である(R1,R2,_和_2),
        _和 is _和_1 + _和_2.

行列の転置([],[],[]) :- !.
行列の転置([[A|R]|R1],[A|R2],[R|R3]) :-
        行列の転置(R1,R2,R3).

行列の転置([[]|_],[]) :- !.
行列の転置(L,[B|R1]) :-
        行列の転置(L,B,R2),
        行列の転置(R2,R1),!.