このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1255709298/990
#  テンプレ無視してすみませんでした。 
#   
#  [1] 授業単元:プログラミング論  
#  [2] 問題文:国語・数学・理科の3教科の得点を入力し、平均点が 
#       90点以上…「平均点X 評価はAです。」 
#       80点以上…「平均点X 評価はBです。」 
#       70点未満…「平均点X 追試の対象です。」 
#  と表示するプログラムを作成しなさい。 
#   
#    実行例 
#      国語90 
#      数学90 
#      理科90 
#   
#    平均点90点 評価はAです。 
# 
:- op(450,fx,国語).
:- op(450,fx,数学).
:- op(450,fx,理科).

試験の個人平均点による評価 :-
    三科目の点数を得る(_国語,_数学,_理科),
    試験の個人平均点による評価(_国語,_数学,_理科,_評価),
    write_formatted('平均点%t点  評価は%tです。\n').

試験の個人平均点による評価(_国語,_数学,_理科,_評価) :-
    相加平均([_国語,_数学,_理科],_相加平均),
    試験の個人平均点による評価(_相加平均,_評価).

試験の個人平均点による評価(_相加平均,'A') :- _相加平均 >= 90.
試験の個人平均点による評価(_相加平均,'B') :- _相加平均 >= 80,_相加平均 < 90.
試験の個人平均点による評価(_相加平均,'C') :- _相加平均 >= 70,_相加平均 < 80.
試験の個人平均点による評価(_相加平均,'追試の対象') :- _相加平均 < 70.

三科目の点数を得る(_国語,_数学,_理科) :-
    write('科目名点数で改行して三科目の点数を入れてください\n'),
    三科目の点数ならびを得る([],L),
    member([国語,_国語],L),
    member([数学,_数学],L),
    member([理科,_理科],L),!.

三科目の点数ならびを得る(L,L) :- length(L,3),!.
三科目の点数ならびを得る(L1,L) :-
    get_line(_行),
    atom_to_term(_行,_項,_),
    _項 =.. [_科目,_点数],
    member(_科目,[国語,数学,理科]),
    \+(member([_科目,_],L1)),
    _点数 >= 0,
    _点数 =< 100,
    三科目の点数ならびを得る([[_科目,_点数]|L1],L),!.
三科目の点数ならびを得る(L1,L) :-
    write('その科目はすでに入力済みであるか、適切な科目でありません\n'),
    三科目の点数ならびを得る(L1,L).