このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/592
#  [1] 授業単元:データ構造入門 
#  [2] 問題文(含コード&リンク):問題文が長いためこちらに記載しました http://ime.nu/ideone.com/R8gaZ 
#  
#  【問題1】
#  サイコロのように1から6の目を等確率で発生させる関数を、rand()関数を用いて次の方法で作成せよ。
#  1+(int)(6.0*rand()/(1.0+RAND_MAX)); の演算で、1から6まで発生させる。
#   

'サイコロのように1から6の目を等確率で発生する乱数'(_サイコロのように1から6の目を等確率で発生する数) :-
_サイコロのように1から6の目を等確率で発生する数 is ceiling(6.0 * random(2147483647) / (1.0+2147483647)).


サイコロ乱数発生テスト(_繰り返し回数,_1,_2,_3,_4,_5,_6) :-
サイコロのように1から6の目を等確率で発生する乱数ならび(_繰返し回数,_乱数ならび),
サイコロの目ごとの度数(_乱数ならび,[_1,_2,_3,_4,_5,_6]).

サイコロのように1から6の目を等確率で発生する乱数ならび(_繰返し回数,_乱数ならび) :-
findall(N,(
between(1,_繰り返し回数,_),
'サイコロのように1から6の目を等確率で発生する乱数'(N)),_乱数ならび).

サイコロの目ごとの度数(_乱数ならび,[_1,_2,_3,_4,_5,_6]) :-
findall(_度数,(
between(1,6,M),
度数(member(M,_乱数ならび),_度数)),[_1,_2,_3,_4,_5,_6]).

度数(P,_度数) :-
findall(1,P,L),
length(L,_度数).