このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/284
#  [1] 授業単元:プログラム演習A 
#  [2] 問題文:全30件の成績(0〜100点)をキーボードから 
#  読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点 の 
#  11通りの区間にそれぞれ何人が入るかを調べなさい。 
#  ただし、各区間に入る人数を溜めておく入れ物として 
#  配列を利用すること。更に調べた人数に従って、各区間を 
#  ヒストグラムで表しなさい。 
#   
#  0点:*** 
#  10点:***** 
#  20点:**** 
#  ・ 
#  ・ 
#  100点:* 
#   
#  

'全30件の成績(0〜100点)をキーボードから読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか調べヒストグラムで表わす' :-
        '全30件の成績(0〜100点)をキーボードから読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'(X),
        ヒストグラムで表わす(X).

'全30件の成績(0〜100点)をキーボードから読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'(X) :-
        '全30件の成績(0〜100点)をキーボードから読み込み、'(L),
        '0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'(L,[[],[],[],[],[],[],[],[],[],[],[]],X),!.

'全30件の成績(0〜100点)をキーボードから読み込み、'(L) :-
        findall(_点数,(for(1,N,30),write_formatted('第%t件目を入力してください : ',[N]),get_integer(_点数)),L).

'0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'([],L,L) :- !.
'0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'([_点数|R],L1,L) :-
         _要素位置 is _点数 // 10 + 1,
         '区間のならびに*を追加'(_要素位置,L1,L2),
        '0〜9点, 10〜19点,・・・, 90〜99点, 100点の11通りの区間にそれぞれ何人が入るか'(R,L2,L).

'区間のならびに*を追加'(_要素位置,L1,L2) :-
        list_nth(_要素位置,L1,L),
        要素番号によるならびの置換(_要素位置,[*|L],L1,L2).

ヒストグラムで表わす(X) :-
        append(L0,[L|R],X),
        length(L0,N),
        N2 is N * 10,
        concat_atom(L,S),
        write_formatted('%t点 : %t\n',[N2,S]),
        R = [],!.