1

Prologを使用してポーカーゲームをコーディングしようとしています。ロイヤルフラッシュのコーディング方法は理解していますが、4種類のコードが機能しません。

私は次のコードを持っています:

four_of_a_kind(R):-
member(card(V, T1), R),
member(card(V, T2), R),
member(card(V, T3), R),
member(card(V, T4), R).

ここで、Vは同じにしたいランクで、T1、T2、T3、T4はスーツです。Rは私のカードのリストです。

誰かがプロローグで4種類をコーディングする方法を説明してください、そして私が間違っていることを説明してください。

4

1 に答える 1

2

あなたの問題は、あなたが常に手全体を検索し、 T1、T2 ..が自由変数であるということです、それで

member(card(V, T1), R),
...

同じカードで4回統合し、four_of_a_kindは常にtrueを返します。

解決策:スーツをロックするだけです。

コード:

is_card(X,Y) :-
    number(X), between(1,13,X),
    member(Y, [c,d,h,s]). /* clubs, diamonds, hearts and spades */

four_of_a_kind(R) :-
    member(card(V,c), R),
    member(card(V,d), R),
    member(card(V,h), R),
    member(card(V,s), R), !.

いくつかのクエリ:

?- four_of_a_kind([card(7,c), card(7,d), card(7,h), card(9,s), card(7,s)]).
true.

?- four_of_a_kind([card(7,c), card(7,d), card(9,h), card(9,s), card(7,s)]).
false.
于 2012-08-05T22:06:08.923 に答える