このディレクトリの索引
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です。 
# 

試験の個人平均点による評価 :-
    三科目の点数を得る(_国語,_数学,_理科),
    試験の個人平均点による評価(_国語,_数学,_理科,_評価),
    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(_行),
    科目と点数を得る(_行,_科目,_点数),
    \+(member([_科目,_],L1)),
    三科目の点数ならびを得る([[_科目,_点数]|L1],L),!.
三科目の点数ならびを得る(L1,L) :-
    write('その科目はすでに入力済みであるか、適切な科目でありません\n'),
    三科目の点数ならびを得る(L1,L).

科目と点数を得る(_行,_科目,_点数) :-
    atom_chars(_行,Chars),
    空白を取り除く(Chars,Chars2),
    科目と点数を得る(Chars,_科目,_点数).

空白を取り除く([],[]) :- !.
空白を取り除く([' '|R1],R2) :-
    空白を取り除く(R1,R2),!.
空白を取り除く([A|R1],[A|R2]) :-
    空白を取り除く(R1,R2),!.

科目と点数を得る([国,語|R],国語,_点数) :- 点数を得る(R,_点数),!.
科目と点数を得る([数,学|R],数学,_点数) :- 点数を得る(R,_点数),!.
科目と点数を得る([理,科|R],理科,_点数) :- 点数を得る(R,_点数),!.

点数を得る(L) :-
    number_chars(_点数,L),
    integer(_点数),
    _点数 >= 0,
    _点数 =< 100.