このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1245853701/901
# [1] 授業単元: C言語プログラミング演習
# [2] 問題文(含コード&リンク): プログラムを実行すると
# 行列1:
# 1,2,3
# 4,5,6
# 7,8,9
# 行列2:
# 3,4,5
# 6,7,8
# 9,10,11
# と表示する。最後に行列1と行列2の積を計算し、以下のように表示
# するプログラム。
# [行列1と行列2の積は
# ?,?,?
# ?,?,?
# ?,?,?]

t432 :-
    _行列1 = [[1,2,3],[4,5,6],[7,8,9]],
    _行列2 = [[3,4,5],[6,7,8],[9,10,11]],
    write('行列1:\n'),行列表示(_行列1),
    write('行列2:\n'),行列表示(_行列2),
    行列の積(_行列1,_行列2,_行列3),
    write('行列1と行列2の積は\n'),行列表示(_行列3).

行列表示([]).
行列表示([_行|R]) :- concat_atom(_行,',',[_表示文字列]),write_formatted('%t\n',[_表示文字列]),行列表示(R).

行列の積(L1,L2,X) :- 行列の転置(L2,L3),行列の積の一(L1,L3,X).

行列の積の一([],_,[]) :- !.
行列の積の一([A|R1],L,[S1|R3]) :- 行列の積の二(A,L,S1),行列の積の一(R1,L,R3).

行列の積の二(_,[],[]) :- !.
行列の積の二(A,[B|R2],[C|R3]) :- 行列の積の三(A,B,C),行列の積の二(A,R2,R3).

行列の積の三([],[],0) :- !.
行列の積の三([A|R1],[B|R2],S) :- S1 is A * B,行列の積の三(R1,R2,S2),S is S1 + S2 .

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

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