【发布时间】:2017-02-28 02:35:20
【问题描述】:
我正在处理这个 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).
这并没有给我正确的答案。我该如何解决这个问题?
【问题讨论】:
标签: prolog