このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/875
#  [1]プログラミング実習 
#  [2] 
#  表面に色が塗られたサイコロが二つあります 
#  それぞれ共に 
#  赤が3面 
#  青が2面 
#  緑が1面 
#  あります 
#  二つのサイコロを同時に振ると色の組み合わせは 
#  1)赤赤 
#  2)赤青 
#  3)赤緑 
#  4)青青 
#  5)青緑 
#  6)緑緑 
#  の6通りありますが 
#  出やすい組み合わせの順に並び替えて出力しなさい 
#  [3]C 
#  [4]11/30 
#  [5]標準ライブラリのみでコンソールに出力すること 
# 
# 

パターン(1,赤,赤). 
パターン(2,赤,青). 
パターン(2,青,赤). 
パターン(3,赤,緑). 
パターン(3,緑,赤). 
パターン(4,青,青). 
パターン(5,青,緑). 
パターン(5,緑,青). 
パターン(6,緑,緑).

サイコロ(1,[赤,赤,赤,青,青,緑]).
サイコロ(2,[赤,赤,赤,青,青,緑]).

出やすい組み合わせの順に並び替えて出力しなさい :-
        サイコロの出目を数える(100000,L),
        大きい順に取り出す(L).

サイコロの出目を数える(0,[[0,1],[0,2],[0,3],[0,4],[0,5],[0,6]]) :- !.
サイコロの出目を数える(M,L) :-
       'サイコロの目'(_目_1,_目_2),
       パターン(_パターン番号,_目_1,_目_2),
       M_1 is M - 1,
       サイコロの出目を数える(M_1,L_1),
       'パターンの度数を更新'(_パターン番号,L_1,L).

'サイコロの目'(_目_1,_目_2) :-
        サイコロの目(1,_目_1),
        サイコロの目(2,_目_2).

サイコロの目(N,_目_1) :-
        サイコロ(N,L1),
        M is rendom(6) + 1,
        nth1(M,L1,_目_1),!.

'パターンの度数を更新'(_パターン番号,L1,L2) :-
        append(L0,[[_度数_1,_パターン番号]|R],L1),
        _度数_2 is _度数 + 1,
        append(L0,[[_度数_2,_パターン番号]|R],L2).

大きい順に取り出す([]).
大きい順に取り出す(L) :-
        append(L0,[[_度数,_パターン番号]|R],L) :-
        全て要素の度数が等しいか小さい(_度数,L0,R),
        表示する(_パターン番号),
        append(L0,R,L2),
        大きい順に取り出す(L2).

全ての要素の度数が等しいか小さい(A,L1,L2) :-
        append(L1,L2,L),
        \+((append(_,[B|_],L),B > A)),!.

表示する(_パターン番号) :-
         パターン(_パターン番号,_色1,_色2),
        writef('%t%t',[_色1,_色2]),!.