【问题标题】:How to check the repeatable variables in a list in prolog如何检查序言列表中的可重复变量
【发布时间】: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


    【解决方案1】:

    递归需要一个基本情况;你还没有为isValid指定一个。

    【讨论】:

    • @user7630822 是 isValid([], []). true 根据您对 isValid 的定义?
    猜你喜欢
    • 2019-10-11
    • 2017-01-27
    • 2020-04-05
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2019-01-17
    • 2015-03-02
    相关资源
    最近更新 更多