このディレクトリの索引 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. 行列の表示(_).