このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/610
#  【質問テンプレ】  
#  [1] 授業単元:情報技術  
#  [2] 問題文(含コード&リンク): 
#  以下の2つの要件を満たす、3行3列の行列の積を計算し、表示するプログラムmultiply.cを作成せよ。 
#   
#  (1)整数型の行列A,Bおよびそれらの行列積A*Bを、以下の配列名で宣言する(A,Bの値は各個人で自由に設定)。 
#   
#  int matrix_a[3][3]={{1,2,3},{4,5,6},{7,8,9}};/*行列A*/ 
#  int matrix_b[3][3]={{10,11,12},{13,14,15},{16,17,18}};/*行列B*/ 
#  int matrix_multiply_a_by_b[3][3]={{0,0,0},{0,0,0},{0,0,0}};/*計算結果代入用の行列*/ 
#   
#  (2)行列の積A*Bのi行j列目の要素の計算を、for文を用いて行うこと。 
#    
#  

matrix_a([[1,2,3],[4,5,6],[7,8,9]]).
matrix_b([[10,11,12],[13,14,15],[16,17,18]]).

'行列の積A*Bのi行j列目の要素の計算を、for文を用いて行うこと。'(_i行,_j列,_i行j列の要素) :-
        'matrix_aのi行とmatrix_bのj列'(_i行目,_j列目,L1,L2),
        findsum(S,(
                    for(1,N,3),
                    nth1(N,L1,A),
                    nth1(N,L2,B),
                    S is A * B),
                _i行j列の要素).

'matrix_aのi行とmatrix_bのj列'(_i行目,_j列目,L1,L2) :-
        matrix_a(LL1),
        matrix_b(LL2),
        nth1(_i行,LL1,L1),
        'matrix_bのj列ならび'(_j列目,LL2,L2).

'matrix_bのj列ならび'(_,_,[],[]).
'matrix_bのj列ならび'(_j列目,[L1|R1],[X|R2]) :-
        nth1(_j列目,L1,X),
        'matrix_bのj列ならび'(_j列目,R1,R2).

findsum(A,B,C) :-
        findall(A,B,L),
        sum(L,C).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'行列の積A*Bのi行j列目の要素の計算'(_i行,_j列,_i行j列の要素) :-
        'matrix_aのi行とmatrix_bのj列'(_i行目,_j列目,L1,L2),
        'i行j列目の要素は'(L1,L2,_i行j列目の要素).

'i行j列目の要素は'([A],[B],S) :-
        S is A * B,!.
'i行j列目の要素は'([A|R1],[B|R2],S) :-
        'i行j列目の要素は'(R1,R2,S_2),
        S is A * B + S_2.

'matrix_aのi行とmatrix_bのj列'(_i行目,_j列目,L1,L2) :-
        matrix_a(LL1),
        matrix_b(LL2),
        転置(LL2,LL2_2),
        nth1(_i行,LL1,L1),
        nth1(_j列,LL2_2,L2).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'行列の積A*Bのi行j列目の要素の計算'(_i行,_j列,_i行j列の要素) :-
        matrix_a(LL1),
        matrix_b(LL2),
        '3×3の行列の掛算演算表'(LL1,LL2,LL3),
        nth1(_i行,LL3,L),
        nth1(_j列,L,_式),
        _i行j列の要素 is _式.

'3×3の行列の掛算演算表'([
    [A11,A12,A13],
    [A21,A22,A23],
    [A31,A32,A33]],
   [[B11,B12,B13],
    [B21,B22,B23],
    [B31,B32,B33]],
   [[A11*B11+A12*B21+A13*B31,A11*B12+A12*B22+A13*B32,A11*B13+A12*B23+A13*B33],
    [A21*B11+A22*B21+A23*B31,A21*B12+A22*B22+A23*B32,A21*B13+A22*B23+A23*B33],
    [A31*B11+A32*B21+A33*B31,A31*B12+A32*B22+A33*B32,A31*B13+A32*B23+A33*B33]]).