このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/563
#  http://ime.nu/codepad.org/bsGYVXWW  
# 
#  4名の学生別に3科目の成績を入力してその学生別平均と科目別平均を表示する。
#  
#   

'4名の学生別に3科目の成績を入力してその学生別平均と科目別平均を表示する' :-
        '4名の学生別に3科目の成績を入力して'(LL),
        'その学生別平均と'(LL,_学生別平均ならび),
        '科目別平均を'(LL,_科目別平均ならび),
        '表示する'(_学生別平均ならび,_科目別平均ならび).

'4名の学生別に3科目の成績を入力して'(LL) :-
        '4名の'(LL,4),
        findall(L,(
                    学生別に(LL,L),
                    '3科目の成績を入力する'(L)),
                LL).

'4名の'(LL) :-
        length(LL,4).

学生別に(LL,L) :-
        append(_,[L|_],LL).

'3科目の成績を入力する'(L) :-
        '3科目の'(L),
        findall(_成績,(
                    成績を(L,_成績),
                    入力する(_成績)),
                L).

'3科目の'(L) :-
        length(L,3).

成績を(L,_成績) :-
        append(_,[_成績|_],L).

入力する(_科目別成績) :-
        get_line(Line),
        入力検査(Line,_科目別成績),!.
入力する(_科目別成績) :-
        入力する(_科目別成績).

入力検査(Line,_科目別成績) :-
        atom_to_term(Line,_科目別成績,_),
        integer(_科目別成績),
        _科目別成績 >= 0,
        _科目別成績 =< 100,!.
入力検査(Line,_科目別成績) :-
        writef('入力された%tからは科目成績として適切な整数が得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

'その学生別平均と'(LL,_学生別平均ならび) :-
        findall(_平均,(
                    append(_,[L|_],LL),
                    相加平均(L,_平均)),
                _学生別平均ならび).

'科目別平均を'(LL,_科目別平均ならび) :-
        転置(LL,LL1),
        findall(_平均,(
                    append(_,[L|_],LL1),
                    相加平均(L,_平均)),
                _科目別平均ならび).