このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/615
#  [1] 授業単元:アルゴリズム  
#  [2] 問題文(含コード&リンク):  
#   3 x 3 の行列の値が書かれたファイルを二つ用意する. この 2 つの行列の積を新しいファイルに書き出すプログラムを作成せよ. 
#  (例えば, 行列 A を MatrixA.txt, 行列 B を MatrixB.txt と用意すると, プログラム実行後には行列 A と行列 B の積の値が ファイル MatrixC.txt に書き込まれているようにする.)  
#  

'3 x 3 の行列の値が書かれたファイルを二つ用意する. この 2 つの行列の積を新しいファイルに書き出す'(_入力ファイル1,_入力ファイル2,_出力ファイル) :-
        get_split_lines(_入力ファイル1,[',',' '],LL1),
        get_split_lines(_出力ファイル2,[',',' '],LL2),
        行列の積(LL1,LL2,LL3),
        新しいファイルに書きだす(_出力ファイル,LL3).

新しいファイルに書きだす(_出力ファイル,LL3) :-
        open(_出力ファイル,write,Outstream),
        append(_,[L|R],LL3),
        writef(Outstream,'%t,%t,%t\n',L),
        R = [],
        close(Outstream).

行列の積(L1,L2,X) :-
        置換(L2,L4),
        行列の積の一(L1,L4,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.