このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/566
#  [1] 授業単元:プログラミング演習 2 
#  [2] 問題文(含コード&リンク)        
#  行列の積を計算する関数multの関数プロトタイプ宣言が以下のように記述されている 
#  void mult(double *ma, double *mb, double *mc, int n); 
#  いま、定数Nの値がmain関数の外で#define N 3 と定義されている。N×Nの正方行列maとmb,そしてmcはmain関数の中で 
#  double ma[N][N]; 
#  double mb[N][N]; 
#  double mc[N][N] = { 0.0 } ; 
#  と定義されている。このとき関数multを次のように呼び出して行列の積mc=ma • mb を計算したい。 
#  mult((double *)ma, (double *)mb, (double *)mc, N); 
#  関数multをブラケット演算子[]なしで書き上げなさい。 
#  [3.1] OS: unix  
#  [3.2] コンパイラ名とバージョン: gcc  
#  [3.3] 言語: C  
#  [4] 期限:11月23日(出来れば早めにお願いします)  
# 

'3×3の行列の掛算'(_行列_1,_行列_2,_行列_3) :-
        '3×3の行列の掛算演算表'(_行列_1,_行列_2,_行列_4),
        行列の演算(_行列_4,_行列_3).

行列の演算([],[]).
行列の演算([_行|R1],[_演算済み行|R2]) :-
        行の演算(_行,_演算済み行),
        行列の演算(R1,R2).

行の演算([],[]).
行の演算([_式|R1],[_値|R2]) :-
        _値 is _式,
        行の演算(R1,R2).

'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]]).