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

ポーカーの役(_手札ならび,フラッシュ) :-
        フラッシュとは5枚の手札が全部同じマークになること。ただし、番号が連続している場合はストレートフラッシュといって別の役となる(_手札ならび).

ポーカーの役(_手札ならび,ストレート) :-
        ストレートとは5枚の手札が連続した番号になること。ただし、マークが全部同じ場合はストレートフラッシュといって別の役となる(_手札ならび).

ポーカーの役(_手札ならび,フルハウス) :-
        フルハウスとは3枚が同一番号で、別の番号の残り2枚も同一番号であるもの(_手札ならぴ).


フラッシュとは5枚の手札が全部同じマークになること。ただし、番号が連続している場合はストレートフラッシュといって別の役となる(_手札ならび) :-
        全部同じマーク(_手札ならび),
        ストレートフラッシュになるものを除外する(_手札ならび).        

全部同じマーク(_手札ならび) :-
        all(_手札ならび,[_,_共通マーク]),!.

ストレートフラッシュになるものを除外する(_手札ならび) :-
        判断しやすいように番号順に並べ直す(_手札ならび,_番号順に整列した手札ならび),
        \+(番号が連続している(_番号順に整列した手札ならび)),!.

ストレートとは5枚の手札が連続した番号になること。ただし、マークが全部同じ場合はストレートフラッシュといって別の役となる(_手札ならび) :-
        判断しやすいように番号順に並べ直す(_手札ならび,_番号順に整列した手札ならび),
        番号が連続している(_番号順に整列した手札ならび),
        \+(全部同じマーク(_手札ならび)).

判断しやすいように番号順に並べ直す(_手札ならび,_番号順に整列した手札ならび) :-
        sort(_手札ならび,_番号順に整列した手札ならび).

番号が連続している(_番号順に整列した手札ならび) :-
        番号が連続していることを再帰的に確かめる(_番号順に整列した手札ならび).

番号が連続していることを再帰的に確かめる([[_カード番号1,_],[_カード番号2,_]|R]) :-
        _カード番号2 is _カード番号1 + 1,
        番号が連続していることを再帰的に確かめる([_カード番号2|R]).
番号が連続していることを再帰的に確かめる([_]).

フルハウスとは3枚が同一番号で、別の番号の残り2枚も同一番号であるもの(_手札ならぴ) :-
        判断しやすいように番号順に並べ直す(_手札ならび,_番号順に整列した手札ならび),
        それぞれ同一番号の二枚、三枚組(_番号順に整列した手札ならび).

それぞれ同一番号の二枚・三枚組([[_A,_],[_A,_],[_A,_],[_B,_],[_B,_]]) :-  \+(A=B),!.
それぞれ同一番号の二枚・三枚組([[_A,_],[_A,_],[_B,_],[_B,_],[_B,_]]) :-  \+(A=B),!.