このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/83
#  ポーカーゲームを作るプログラムの課題を教えてください。 
#  [1] プログラムまとめ 
#  [2] 課題1のストレート、フラッシュ、フルハウスをヒントを使って判定する関数を作る。 
#   

ポーカーの役(_手札ならび,フラッシュ) :-
        すべての手札のマークが共通である(_手札ならび),
        ストレートではない(_手札ならび,ストレート),!.
ポーカーの役(_手札ならび,ストレート) :-
        並べ直して、番号は連続したカードは5枚あることを確認する(_整列した手札ならび),
        '同一マークではない'(_整列した手札ならび),!.
ポーカーの役(_手札ならび,フルハウス) :-
        並べ直して、同一番号の2枚、3枚組になっているか確認する(_手札ならび).


すべての手札のマークが共通である(_手札ならび) :-
        all(_手札ならび,[_,_共通マーク]),!.

ストレートではない(_手札ならび) :- \+(ポーカーの役(_手札ならび,ストレート)).

並べ直して(_手札ならび,_整列した手札ならび) :- sort(_手札ならび,_整列した手札ならび).

並べ直して、番号は連続したカードは5枚あることを確認する(_手札ならび) :-
        並べ直して(_手札ならび,_整列した手札ならび),
        _整列した手札ならび = [_最小値|R],
        _最大値 is _最小値 + 4,
        findall(_番号,for(_最小値,_番号,_最大値),_整列した手札ならび),

同一マークではない(_整列した手札ならび) :-
        \+(all(_整列した手札ならび,[_,_共通マーク])),!.

並べ直して、同一番号の2枚、3枚組になっているか確認する(_手札ならび) :-
        並べ直して(_手札ならび,_整列した手札ならび),
        同一番号の2枚、3枚組になっている(_整列した手札ならび).

同一番号の2枚、3枚組になっている([[A,_],[A,_],[B,_],[B,_],[B,_]]) :- \+(A = B),!.
同一番号の2枚、3枚組になっている([[A,_],[A,_],[A,_],[B,_],[B,_]]) :- \+(A = B),!.