このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1269438098/842
#  [1] 授業単元:自学 
#  [2] 問題文(含コード&リンク):擬似乱数を用いて大吉(excellent luck)中吉(good luck)吉(good luck)凶(bad luck)大凶(worst luck)を出力し 
#  それぞれの項目のコード4,3,2,1,0を返す関数fortune()を作成せよ 
#  ただしそれぞれの項目が現れる確立は順に5.0,20.0,50.0,20.0,5.0%とする。 
#  またこの関数を用いて2000回のサンプリングを行ったときそれぞれの項目の出現割合を出力するプログラムを作成し上記の割合とほぼ同じ値が得られていることを検証せよ。 
#   
#  

fortune(_サンプリング回数,_出現割合ならび) :-
        _サンプリング回数 > 0,
        M is random mod 100,
        _サンプリング回数の一 is _サンプリング回数 - 1,
        fortune(_サンプリング回数の一,_出現割合ならびの一),
        fortune(M,_出現割合ならびの一,_出現割合ならび).
fortune(0,[]).

fortune(N,[X|R],[Y|R]) :- 分布(大吉,N1,N2),N >= N1,N =< N2,Y is X + 1,!.
fortune(N,[A,X|R],[A,Y|R]) :- 分布(中吉,N1,N2),N >= N1,N =< N2,Y is X + 1,!.
fortune(N,[A,B,X|R],[A,B,Y|R]) :- 分布(吉,N1,N2),N >= N1,N =< N2,Y is X + 1,!.
fortune(N,[A,B,C,X|R],[A,B,C,Y|R]) :- 分布(凶,N1,N2),N >= N1,N =< N2,Y is X + 1,!.
fortune(N,[A,B,C,D,X|R],[A,B,C,D,Y|R]) :- 分布(大凶,N1,N2),N >= N1,N =< N2,Y is X + 1,!.

分布(大吉,0,4).
分布(中吉,5,24).
分布(吉,25,74).
分布(凶,75,94).
分布(大凶,95,99).