このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/858
#   
#  5人の学生の成績(100点満点)の値をキーボードから読み込み,それらの平均点と分散(標準偏差の二乗)を求めるプログラムを作れ。 
#   
#   
#  授業の課題です 
#  解説付きでお願いします。 
# 
# 

'5人の学生の成績(100点満点)の値をキーボードから読み込み,それらの平均点と分散(標準偏差の二乗)を求める' :-
        '5人の学生の成績(100点満点)の値をキーボードから読み込み'(_5人の学生の成績ならび),
        'それらの平均点と分散(標準偏差の二乗)を求める'(_5人の学生の成績ならび,_平均点,_分散),
        append(_5人の学生の成績ならび,[_平均点,_分散],_表示情報),
        writef('%t,%t,%t,%t,%t の 平均点は %t, 分散は %t です。\n,_表示情報).

'5人の学生の成績(100点満点)の値をキーボードから読み込み'(_5人の学生の成績ならび) :-
        length(_5人の学生の成績ならび,5),
        findall(_成績,(
                    append(L0,[_成績|_],_5人の学生の成績ならび),
                    length([_|L0],_何個目),
                    write('成績(0-100点)の[%t個目]を入力してください : ',[_何個目]),
                    成績入力(_成績)),
                _5人の学生の成績ならび).

成績入力(_成績) :-
        get_line(Line),
        成績入力診断(Line,_成績),!.
成績入力(_成績) :-
        成績入力(_成績).

成績入力診断(Line,_成績) :-
        atom_to_term(Line,_成績,_),
        integer(_成績),
        _成績 >= 0,
        _成績 =< 100,!.
成績入力診断(Line,_成績) :-
        writef('入力された %t からは成績(0-100点)が得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

'それらの平均点と分散(標準偏差の二乗)を求める'(_5人の学生の成績ならび,_平均点,_分散) :-
        それらの平均点と(_5人の学生の成績ならび,_平均点),
        分散を求める(_5人の学生の成績ならび,_分散).

それらの平均点と(_5人の学生の成績ならび,_平均点) :-
        findavg(_成績,(
                        append(_,[_成績|_],_5人の学生の成績ならび)),
                _平均点).

分散を求める(_5人の学生の成績ならび,_平均点,_分散) :-
        findavg(_偏差,(
                        append(_,[_成績|_],_5人の学生の成績ならび),
                        _偏差 is (_成績 - _平均点) * (_成績 - _平均点)),
                _分散).