このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/204
#  「4行3列の配列をキーボードから読み込み、 
#  各行、各列の和、及び配列全体の総和を求め、表示する 
#  プログラムを作成しなさい。」という問題です。 

'4行3列の配列をキーボードから読み込み、各行、各列の和、及び配列全体の総和を求め、表示する' :-
        '4行3列の配列をキーボードから読み込み、'(_4行3列の配列),
        各行、各列の和、及び配列全体の総和を求め、(_4行3列の配列,_各行の和,_各列の和,_配列全体の総和),
        '_4行3列の配列,_各行の和,_各列の和,_配列全体の総和を表示する'(_4行3列の配列,_各行の和,_各列の和,_配列全体の総和).

'4行3列の配列をキーボードから読み込み、'(_4行3列の配列) :-
        write('列を3要素の整数リストとして4行入力しなさい(ただしread/1で読み込めるよう入力は.で終わること) : '),
        findall(_3要素の整数ならび,(for(1,N,3),read(_3要素の整数ならび)),_4行3列の配列).

各行、各列の和、及び配列全体の総和を求め、(_4行3列の配列,_各行の和,_各列の和,_配列全体の総和) :-
        各行の和(_4行3列の配列,_各行の和),
        各列の和(_4行3列の配列,_各列の和),
        配列全体の総和(_各行の和,_配列全体の総和).

各行の和(_4行3列の配列,_各行の和) :-
        findall(_行の和,(append(_,[_行|_],_4行3列の配列),
        sum(_行,_行の和)),_各行の和).

各列の和(_4行3列の配列,_各列の和) :-
        転置(_4行3列の配列,_転置された配列),
        各行の和(_転置された配列,_各列の和).

配列全体の総和(_各行の和,_配列全体の総和) :-
         sum(_各行の和,_配列全体の総和).

'_4行3列の配列,_各行の和,_各列の和,_配列全体の総和を表示する'(_4行3列の配列,_各行の和,_各列の和,_配列全体の総和) :-
        行の表示(_4行3列の配列,_各行の和),
        各列の和の表示(_各列の和),
        配列全体の総和の表示(_配列全体の総和).

行の表示([],[]) :- !.
行の表示([_行|R1],[_和|R2]) :-
        append(_行,[_和],L),
        write_formatted('%d,%d,%d,%d\n',L),
        行の表示(R1,R2).

各列の和の表示(_各列の和) :-
        write_formatted('%d,%d,%d,',_各列の和).

配列全体の総和の表示(_配列全体の総和) :-
        write_formatted('%d\n',[_配列全体の総和]).

sum([],0) :- !.
sum([N|R],S) :- sum(R,S1),S is N + S1.