このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/604
#  [1] 授業単元: プログラム  
#  [2] 問題文(含コード&リンク):10人分の各教科の平均点を計算する関数を実装してください。  
#  
% 10人分という部分に何か意味があるかどうか? 何教科あるかの方が問題ではないか。
% このプログラムだと教科数の検査ができていない。

'10人分の各教科の平均点を計算する関数を実装してください。' :-
        '10人分の各教科の点数を入力する'(_個人成績ならび),
        '10人分の各教科の平均点を計算する'(_個人成績ならび,_教科毎平均点),
        教科毎の平均を表示する(_教科毎平均点).

'10人分の各教科の平均点を計算する'(_個人成績ならび,_教科毎平均点) :-
        転置(_個人成績ならび,[_|_個人名を除き転置された個人成績ならび]),
        findall(_教科の平均点,(
                    append(_,[L|_],_個人名を除き転置された個人成績ならび),
                    avg(L,_教科の平均点)),
                _教科毎の平均点).

'10人分の各教科の点数を入力する'(_個人成績ならび) :-
        length(_個人成績ならび,10),
        個人成績を一行で入力していく(_個人成績ならび).

個人成績を一行で入力していく([]) :- !.
個人成績を一行で入力していく([_個人成績|R]) :-
        write('個人成績を最初に個人名その後教科成績をカンマ区切りで入力してください : '),
        get_line(Line),
        split(Line,[','],_個人成績),
        本来ならここに項目数検査、項目内容の精査が入る,
        個人成績を一行で入力していく([_],R).

教科毎の平均を表示する(_,[]).
教科毎の平均を表示する(LC,[_平均|R]) :-
        length(LC,N),
        write_formatted('教科-%t の平均点は %t です。\n',[N,_平均]),
        教科毎の平均を表示する([_|LC],R).

%%%%%%%%%%%%%%%%%% 注釈的述語 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
本来ならここに項目数検査、項目内容の精査が入る.