このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/27
#  [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までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し、それぞれの数値の頻度を*のグラフで表し、3の倍数はxで表示する' :-
        '1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(L),
        'それぞれの数値の頻度を*のグラフで表し、3の倍数はxで表示する'(L).

'1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(L) :-
        整数を得る('1から5までの数値',_整数),
        '1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(_整数,L).

'1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(N,L) :-
        \+(between(1,5,N)),!.
'1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(_整数_1,[_整数_1|R]) :-
        整数を得る('1から5までの数値',_整数_2),
        '1から5までの数値を繰り返し入力(入力範囲外の値が入力されたら入力を終了)し'(_整数_2,R).

'それぞれの数値の頻度を*のグラフで表し、3の倍数はxで表示する'(L) :-
        between(1,5,N),
        'それぞれの数値の頻度を'(N,L,_頻度),
        '*のグラフで表し、3の倍数はxで表示する'(N,_頻度),
        N = 5.

'それぞれの数値の頻度を'(N,L,_頻度) :-
        count(member(N,L),_頻度).

'*のグラフで表し、3の倍数はxで表示する'(N,_頻度) :-
        writef('%t=%t:',[N,_頻度]),
        '*のグラフで表し、3の倍数はxで表示する'(N,0,_頻度),
        write('\n').

'*のグラフで表し、3の倍数はxで表示する'(N,_頻度,_頻度) :- !.
'*のグラフで表し、3の倍数はxで表示する'(N,M,_頻度) :-
        '*のグラフで表し'(N,M_1,M_2),
        '*のグラフで表し、3の倍数はxで表示する'(N,M_2,_頻度).
'*のグラフで表し、3の倍数はxで表示する'(N,M_1_頻度) :-
        '3の倍数はxで表示する'(N,M_1,M_2)
        '*のグラフで表し、3の倍数はxで表示する'(N,M_2,_頻度).

'*のグラフで表し'(N,M_1,M_2) :-
        M_2 is M_1 + 1,
        \+(0 is M_2 mod 3),
        writef(*).

'3の倍数はxで表示する'(N,M_1,M_2) :-
        M_2 is M_1 + 1,
        0 is M_2 mod 3,
        writef(x).