このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1357748713/281
#  [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・Bの行列をA×Bの計算をして、その結果を表示するプログラムを作成しなさい。

A=[5 3]
  [3 8]
  [1 6]
  [9 1]
B=[7 1 5 4]
  [1 9 2 8] 

解の表示) [38 32 31 44] 
      [29 75 31 76] 
      [13 55 17 52]
      [64 18 47 44]'(_A, _B,_その結果) :-
        '次のA・Bの行列をA×Bの計算をして、'('A=[5 3]
  [3 8]
  [1 6]
  [9 1]
B=[7 1 5 4]
  [1 9 2 8] ',_その結果),
        その結果を表示する(_その結果).

'次のA・Bの行列をA×Bの計算をして、'(_文字列,_その結果) :-
        '次のA・Bの行列を'(_文字列,_A,_B),
        転置(_B,_B_2),
        行列の掛け算_1(_A,_B_2,_その結果).

'次のA・Bの行列を'(_文字列,_A,_B) :-
        split(_文字列,[' ',' ','[',']'],L),
        '次のA・Bの行列を'(L,_A,_B).

'次のA・Bの行列を'([A,=|R1],L2,L3) :-
        'Aの行列'(R1,L2,R),
        'Bの行列'(R,L3).

'Aの行列'([B,=|R1],[],[B,=|R1]) :- !.
'Aの行列'(L1,[L|R2],R) :-
        'Aの行'(L,L1,R1),
        'Aの行列'(R1,R2,R).

'Aの行'(['\n'|R],[],R).
'Aの行'([N|R1],[N|R2],R) :-
        'Aの行'(R1,R2,R).

'Bの行列を'([B,=|R1],LL) :-
        'Bの行列'(R1,LL).

'Bの行列'([],[]) :- !.
'Bの行列'(L1,[L|R2]) :-
        'Bの行'(L1,L,R1),
        'Bの行列'(R1,R2).

'Bの行'(['\n'|R],[],R).
'Bの行'([N|R1],[N|R2],R) :-
        'Bの行'(R1,R2,R).

その結果を表示する(_その結果) :-
        append(_,[L|R],_その結果),
        atomic_list_concat(L,' ',_行表示),
        writef('\t[%t]\n',[_行表示]),
        R = [].