如何在prolog中检查列表中的可重复变量

时间:2017-02-28 02:35:20

标签: prolog

我正在研究这个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 个答案:

答案 0 :(得分:1)

递归需要一个基本案例;您尚未为isValid指定一个。