2017-02-28 23 views
0

我正在研究這個Prolog問題,我必須設計一個程序來創建4種不同顏色(藍色,紅色,綠色和黃色)的嚮導帽子的網格,其中,每個帽具有4個不同的字母(W,X,Y和Z)之一。帽子必須佈置在沒有行或列有兩頂帽子搭配同色系的帽子或與他們同樣的信這樣的方式。如何在序言中檢查列表中的可重複變量

我必須寫一個謂語validRow行是否有效是真的,即,如果沒有兩頂帽子具有相同的顏色或相同的字母。

例如:

?- validRow([(1, 1, red, w), (1, 2, green, x), (1, 3, yellow, y), (1, 4, blue, z)]). 
true. 

這是到目前爲止我的代碼

validRow([(R,C1,Colour1,Letter1), (R,C2,Colour2,Letter2),(R,C3,Colour3,Letter3), (R,C4,Colour4,Letter4)]) :- 
    isValid([Colour1,Colour2,Colour3,Colour4], [Letter1,Letter2,Letter3,Letter4]). 

isValid([HC|TC],[HL|TL]) :- 
    not(member(HC,TC)), 
    not(member(HL,TL)), 
    isValid(TC,TL). 

這不會給我正確的答案。我怎樣才能解決這個問題?

回答

1

遞歸需要鹼的情況下;你沒有指定isValid之一。

+0

的isValid([],[])。這將作爲基礎案例工作嗎? – user7630822

+1

當你嘗試時發生了什麼? –

+0

@ user7630822 is isValid([],[])。true是基於您定義的「isValid」嗎? – lurker