2012-08-05 66 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