このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/246
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/xFhlH4zn 
#  
#  /*
#  1から5までの数値を繰り返し入力し、それぞれの数値の頻度を以下のように表せ。
#  ただし、入力範囲外の値が入力されたら入力を終了し結果を表示する。
#  
#  
#  [実行例]
#  値:3
#  値:4
#  値:3
#  値:3
#  値:2
#  値:2
#  値:3
#  値:0
#  
#  //頻度を*のグラフで表し、3の倍数はxで表示する。//
#  1=0:
#  2=2:**
#  3=4:**x*
#  4=1:*
#  5=0:
#  
#  */
#  

'1から5までの数値を繰り返し入力し、それぞれの数値の頻度を
1=0:
2=2:**
3=4:**x*
4=1:*
5=0:
のように表せ。ただし、入力範囲外の値が入力されたら入力を終了し結果を表示する。' :-
        '1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し、結果を頻度とグラフで表示する'.

'1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し、結果を頻度とグラフで表示する' :-
        '1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_入力値ならび),
        結果を頻度とグラフで表示する(_入力値ならび).

'1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_入力値ならび) :-
        数値を入力(_数値),
        '1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_数値,_入力値ならび).

'1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_数値,[]) :-
        入力範囲外の値が入力された(_数値),!.
'1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_数値,[_数値|R]) :-
        '1から5までの数値'(_数値),
        数値を入力(_数値_2),
        '1から5までの数値を入力範囲外の値が入力されるまで繰り返し入力し'(_数値_2,R).

数値を入力(_数値) :-
        整数を得る('1から5までの整数(終了する時は範囲外の数値を入力)',_数値).

'1から5までの数値'(_数値) :-
        between(1,5,_数値).

入力範囲外の値が入力された(_値) :-
        \+(between(1,5,_数値)).

結果を頻度とグラフで表示する(_入力値ならび) :-
        between(1,5,N),
        結果を頻度とグラフで(N,_入力値ならび,0,_頻度,_グラフ表示記号ならび),
        表示する(N,_頻度,_グラフ表示記号ならび),
        N = 5.

結果を頻度とグラフで(_,[],_頻度,_頻度,[]) :- !.
結果を頻度とグラフで(N,[N|R1],_頻度_1,_頻度,[_表示記号|R2]) :-
        _頻度_2 is _頻度_1 + 1,
        グラフの表示記号を選択する(_頻度_2,_表示記号),
        結果を頻度とグラフで(N,R1,_頻度_2,_頻度,R2),!.
結果を頻度とグラフで(N,[_|R1],_頻度_1,_頻度,R2) :-
        結果を頻度とグラフで(N,R1,_頻度_1,_頻度,R2).

グラフの表示記号を選択する(_頻度,x) :-
        頻度が3の倍数になったら(M_1).
グラフの表示記号を選択する(_頻度,*) :-
        頻度が3の倍数でなかったら(_頻度).

頻度が3の倍数になったら(_頻度) :-
        0 is _頻度 mod 3.

頻度が3の倍数でなかったら(_頻度) :-
        \+(0 is _頻度 mod 3).

表示する(N,_頻度,_グラフ表示記号ならび) :-
        atomic_list_concat(_グラフ表示記号ならび,_表示グラフ文字列),
        writef('%t=%t: %t\n',[N,_頻度,_表示グラフ文字列]).