2012-08-05 69 views
1

我想用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是我的名片。

任何人都可以解释如何编码序言中的四种请解释我做错了吗?

回答

2

您的问题是你搜索整个手的所有时间和T1,T2 ..是自由变量,所以

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

结合4倍,在同一张卡,始终four_of_a_kind回报真正。

解决方案:只需锁定西装。

代码:

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. 
+0

这是个好主意,有'card'既是一个复合词和谓语?也许这个谓词应该叫做'is_card/2'? – aschepler 2012-08-05 23:08:11

+0

你说得对,我会编辑。 – Haile 2012-08-05 23:13:06