このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1260532772/32
# [1] 授業単元: プログラミング論
# [2] 問題文(含コード&リンク):
# 次のA・Bの行列をA×Bの計算をして、その結果を表示するプログラムを作成しなさい。
#
# A=[5 3]   B=[7 1 5 4]
#   [3 8]     [1 9 2 8]
#   [1 6]
#   [9 1]
#
# 解の表示)
#        [38 32 31 44]
#        [29 75 31 76]
#        [13 55 17 52]
#        [64 18 47 44] 

'A'([[5,3],[3,8],[1,6],[9,1]]).

'B'([[7,1,5,4],[1,9,2,8]]).

A・Bの行列をA×Bの計算をして、その結果を表示する :-
    'A'(_行列A),
    'B'(_行列B),
    行列の積(_行列A,_行列B,_行列C),
    行列の表示(_行列C).

% *** user: 行列の積 / 3 ***
行列の積(L1,L2,X) :-
    行列の転置(L2,L4),
    行列の積_1(L1,L4,X) .

% *** user: 行列の積_1 / 3 ***
行列の積_1([],_,[]) :- !.
行列の積_1([A|R1],L,[S1|R3]) :-
    行列の積_2(A,L,S1),
    行列の積_1(R1,L,R3).

% *** user: 行列の積_2 / 3 ***
行列の積_2(_,[],[]) :- !.
行列の積_2(A,[B|R2],[C|R3]) :-
    行列の積_3(A,B,C),
    行列の積_2(A,R2,R3).

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

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

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

行列の表示(_行列) :-
    member(_行,_行列),
    concat_atom(_行,' ',S),
    write_formatted('[%t]\n',[S]),
    fail.
行列の表示(_).