1

我正在尝试使用 Prolog 编写扑克游戏。我知道如何编写皇家同花顺,但我的四类代码不起作用。

我有以下代码:

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

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 回答