このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349545643/864
#  ../test/read.cgi/tech/1349545643/845の問題の 
#   
#  「取り出した玉が黒であるとき、その玉を取り出した箱に 
#  残っている玉が黒玉である確率を求めよ」 
#   
#  という文章を 
#   
#  「取り出した玉が黒であるとき、その玉を取り出した箱から 
#  もう一度玉を取り出したとき黒玉である確率を求めよ。」 
#   
#  に変更すると、二つの箱に任意個の白黒玉を入れた場合を考える事ができる。 
#  片方の箱に{白, 白, 黒}、もう一方に{黒, 黒, 黒, 白}が入ってる場合の確率を求めよ。 
# 

'取り出した玉が黒であるとき、その玉を取り出した箱からもう一度玉を取り出したとき黒玉である確率を求めよ。'(_一つ目の箱,_二つめの箱,_確率) :-
        '箱から黒を取り出した後に、次に黒を取り出す確率は'(_一つ目の箱,_確率_1),
        '箱から黒を取り出した後に、次に黒を取り出す確率は'(_二つ目の箱,_確率_2),
        _求める確率 is 0.5 * _確率_1 + 0.5 * _確率_2.

'箱から黒を取り出した後に、次に黒を取り出す確率は'(_箱,_確率) :-
        黒玉を一つ削除する(_箱,_黒玉を一つ削除した箱),
        length(_黒玉を一つ削除箱,_残りの玉の数),
        黒玉の数(_黒玉を一つ削除した箱,_残りの黒玉の数),
        一つの箱で次に黒玉を取り出す確率を求める(_残りの黒玉の数,_残りの玉の数,_確率).

黒玉を一つ削除する(L1,L1_2) :-
        append(L0,[黒|R],L1),
        append(L0,R,L1_2),!.
黒玉を一つ削除する(L,L).

黒玉の数(_箱,_黒玉の数) :-
        findall(_,member(黒,_箱),L),
        length(L,_黒玉の数).

一つの箱で次に黒玉を取り出す確率を求める(_,0,_) :-
        write('黒玉を取り出したら残りの玉はもうありませんでした。\n確率計算はできません。\n'),!,
        fail.
一つの箱で次に黒玉を取り出す確率を求める(_残りの黒玉の数,_残りの玉の数,_確率) :-
        _確率 is _残りの黒玉の数 / _残りの玉の数.