Prolog四种扑克

时间:2012-08-05 21:43:28

标签: prolog

我正在尝试使用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是我的名单。

任何人都可以解释如何在prolog中编写四种代码并解释我的错误吗?

1 个答案:

答案 0 :(得分: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.