このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/350
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  2x2の行列A,Bの差を求める関数void func2(int A[][], int B[][], int C[][])を定義して 
#  その動作を確かめるプログラムkadai4-2.cを作りなさい。 
#  演算結果はC[][]に代入されて返されるものとする。 
#   ただしAとBはキーボードから次で入力するものとする。 
#  scanf("%d %d %d %d %d %d %d %d", &a[0][0], &a[0][1], &a[1][0],&a[1][1], &b[0][0],&b[0][1],&b[1][0], &b[1][1]); 
#  答えは以下で出力されるものとする。 
#  printf("answer = %d %d %d %d\n", c[0][0], c[0][1], c[1][0], c[1][1]); 
#   
#  

'2x2の行列の差を求めて出力する'(_行列A,_行列B) :-
        '2x2の行列の差を求める'(_行列A,_行列B,_行列Aと行列Bの差),
        出力する(_行列Aと行列Bの差).

'2x2の行列A,Bの差を求める'(_行列A,_行列B,_行列Aと行列Bの差) :-
        '2x2の行列の差'(_行列A,_行列B,_行列Aと行列Bの差の式),
        行列要素を評価する(_行列Aと行列Bの差の式,_行列Aと行列Bの差).

'2x2の行列の差'([[A11,A12],[A21,A22]],[[B11,B12],[B21,B22]],[[A11-B11,A12-B12],[A21-B21,A22-B22]]).

行列要素を評価する([],[]).
行列要素を評価する([L1|R1],[L2|R2]) :-
        findall(_要素の値,(
                    member(_式,L1),
                    _要素の値 is _式),
                L2),
        行列要素を評価する(R1,R2).

出力する([[C11,C12],[C21,C22]]) :-
        writef('answer = %t %t %t %t\n",[C11,C12,C21,C22]).