このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/83
#  ポーカーゲームを作るプログラムの課題を教えてください。 
#  [1] プログラムまとめ 
#  [2] 課題1のストレート、フラッシュ、フルハウスをヒントを使って判定する関数を作る。 
#   
#  /* ヒント: この関数を使うと、 判定が簡単かも */ 
#  void distrib(struct card h[], int dist[]){ 
#    int i; 
#    for(i = 0; i < 14; i++){ 
#      dist[i] = 0;} 
#    for(i = 0; i < 5; i++){ 
#      dist[h[i].pips]++;}} 
#   
#  int is_straight(struct card h[]){ 
#    /* 課題1 */ 
#   return 0;} 
#   
#  int is_flush(struct card h[]){ 
#    /* 課題1 */} 
#   
#  int is_fullhouse(struct card h[]){ 
#    /* 課題1 */ 
#    return 0;} 
#   
#  card h[] は手札のカード
#  h[].pips は手札のカードの番号
#  h[].suit は手札のカードのマークのことです

ポーカーの役(_手札ならび,フラッシュ) :-
        all(_手札ならび,[_,_共通マーク]),
        \+(ポーカーの役(_手札ならび,ストレート)),!.

ポーカーの役(_手札ならび,ストレート) :-
        sort(_手札ならび,L),
        L = [Min|R],
        Max is Min + 4,
        findall(N,for(Min,N,Max),L),
        \+all(_手札ならび,[_,_共通マーク])),!.

ポーカーの役(_手札ならび,フルハウス) :-
        findsetof(_番号,append(_,[[_番号,_]|_],_手札ならび),[_番号1,_番号2]),
        count(append(_,[[_番号1,_]|_],_手札ならび),Count1),
        Count1 >= 2,
        count(append(_,[[_番号2,_]|_],_手札ならび),Count2),
        Count2 >= 2,!.

ポーカーの役(_手札ならび,フルハウス) :-
        sort(_手札ならび,L),
        フルハウス(L).

フルハウス([[_A,_],[_A,_],[_B,_],[_B,_],[_B,_]]) :-
        \+(A = B),!.
フルハウス([[_A,_],[_A,_],[_A,_],[_B,_],[_B,_]]) :-
        \+(A = B),!.