このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/590
#  1] 授業単元:C演習 
#  [2] 問題文 
#  30    29   28   27   26  計 140 
#  25    24   23   22   21  計 115  
#  20    19     18   17   16  計 90 
#  15    14     13   12   11 計 65 
#  計  計   計  計  計 
#  90    86     82   78   72 
#   

ならび情報([30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11]).

ならびから表を形成し表示する(_列数,_表) :-
        ならびから表を形成する(_列数,_表),
        表示する(_列数,_表).

ならびから表を形成する(_列数,_表) :-
        ならび情報(L),
        length(LS0,_列数),
        all(LS0,0),        
        表を形成する(_列数,L,[0|LS0],_表).

表を形成する(_,[],LS,[LS]) :- !.
表を形成する(_n,L1,LS1,[L22|R2]) :-
        length(L2,_n),
        append(L2,R,L1),
        sum(L2,Sum),
        append(L2,[Sum],L22),
        加算(L22,LS1,LS2),
        表を形成する(_n,R,LS2,R2).

加算([],[],[]).
加算([A|R1],[B|R2],[C|R3]) :-
        C is A + B,
        加算(R1,R2,R3).

sum([],0).
sum([A|R],X) :-
        sum(R,Y),
        X is A + Y.

all([],_).
all([A|R],X) :-
        all(R,X).

表示する(_列数,[L]) :-
        '計見出し行の表示'(_列数),
        表示パターンの生成(_列数,P),
        append(L0,[_],L),
        writef(P,L),
        nl,!.
表示する(_列数,[L|R]) :-
        表示パターンの生成(_列数,P),
        concat_atom([P,'計  ','%t  \n'],P2),
        writef(P2,L).
        表示する(_列数,R),!.

計見出し行の表示(_列数) :-
        表示パターンの生成(_列数,P),
        length(L,_列数),
        all(L,計),
        writef(P,L),
        nl,!.

表示パターンの生成(_列数,PL) :-
        length(L,_列数),
        all(L,'%t  '),
        concat_atom(L,P).