このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1258158172/330
#  [1] 授業単元:プログラム 
#  [2]問題文 
#  次の要領でテストの点数を入力し、それぞれの点数代の人数が何人いるか求めるプログラム 
#  1.テストの点数を入力するガイダンスを用いて次のように出力 :点数の入力 終了条件:eあるいはE 
#  2.fgets()を用いて、テストの点数を文字列として入力 
#  3.2で入力した文字列が'e'または'E'ならば処理2〜5の処理を終了して6の処理を行う 
#  4.文字列で入力した点数をint型変数に変換(atoiを使用する) 
#  5.4で変換したint型の点数が0点以上100点以下なら、それぞれの点数代の人数を数える。 
#  6.5の結果の表示 

テストの点数を入力し、それぞれの点数代の人数が何人いるか求める :-
  write(':点数の入力 終了条件:eあるいはE '),get_line(Line),
  テストの点数を入力し、それぞれの点数代の人数が何人いるか求める(Line,[0,0,0,0,0,0,0,0,0,0],_10点ごと出現頻度ならび),
  for(1,N,10),
  list_nth(N,_10点ごと出現頻度ならび,M),
  write_formatted('%t~%t %t人\n',[(N-1) * 10,N * 10 - 1,M]),
  N = 10.

テストの点数を入力し、それぞれの点数代の人数が何人いるか求める(e,L,L) :- !.
テストの点数を入力し、それぞれの点数代の人数が何人いるか求める('E',L,L) :- !.
テストの点数を入力し、それぞれの点数代の人数が何人いるか求める(Line,L1,L) :-
  atom_to_term(Line,N,_),N >= 0,N =< 100,
  M is (N // 10) + 1,
  出現頻度ならびをカウントアップ(N,L1,L2),
  write(':点数の入力 終了条件:eあるいはE '),get_line(Line2),
  テストの点数を入力し、それぞれの点数代の人数が何人いるか求める(Line2,L2,L).
出現頻度ならびをカウントアップ(C,[],[1,C]) :- !.
出現頻度ならびをカウントアップ(C,[[N,C]|R1],[[N2,C]|R1]) :- N2 is N + 1,!.
出現頻度ならびをカウントアップ(C,[[N,C1]|R1],[[N,C1]|R2]) :- 出現頻度ならびをカウントアップ(C,R1,R2).