解决斑马型拼图的建议



我需要你的帮助来解决以下问题:

有3个女孩(Ann,Susan,Alice)需要选择穿什么颜色的鞋子和衣服。鞋子和裙子有三种颜色:白色、蓝色和绿色。 主要条件:

  • Ann讨厌白色。
  • Susan穿着同色的鞋子和裙子。
  • 爱丽丝有一双白鞋。
  • Alice和Ann的鞋子和衣服颜色不同。

我的代码只满足2个条件;我有点难以满足Susan的相同颜色的条件,而其他女孩需要不同颜色的衣服。

这是我想到的:

PREDICATES
   girl(symbol)
   shoes(symbol,symbol)
   skirt(symbol,symbol)
   hates(symbol,symbol)
   will_wear(symbol, symbol, symbol)

CLAUSES
   will_wear(X,Y,Z):-
      girl(X),
      shoes(X,Y),
      skirt(X,Z),
      not(hates(X,Y)),
      not(hates(X,Z)).
   girl(ann).
   girl(susan).
   girl(alice).
   hates(ann,white).
   skirt(_,white).
   skirt(_,blue).
   skirt(_,green).
   shoes(alice,white).
   shoes(_,blue).
   shoes(_,green).
GOAL
   will_wear(Name,Shoes,Dress).
上面的代码工作得很好,但是给出了太多的解决方案。另外,我也想不出一个合理的解决办法来解决苏珊穿同一颜色的鞋子和裙子的问题。

谢谢。

如果我理解正确的话,它们不是舒兰回答的。

这将确保一个女孩穿着相同颜色的衣服和鞋子:

same_color(Girl) :-
    shoes(Girl, Color),
    dress(Girl, Color).

我将留下不同颜色的一个作为练习,但暗示说两件事是不一样的,你说A = B。如果你在使用different_color时遇到困难,请留下评论,告诉我你尝试过什么。

我的脑海里浮现出这样的想法:

only_wears(Girl,Color):-
    shoes(Girl, Color),
    skirt(Girl, Color).
different_shoes(F, S):-
    shoes(F,F_color),
    shoes(S,S_color),
    not(equals(F_color,S_color)).
different_skirts(F, S):-
    skirt(F,F_color),
    skirt(S,S_color),
    not(equals(F_color,S_color)).

我想知道是否有一种方法将子句传递给其他子句,因为different_shoesdifferent_skirts在结构上是相同的。

你可以这样初始化它:

only_wears(ann, white).
different_shoes(alice, ann).
different_skirt(alice, ann).

相关内容

  • 没有找到相关文章

最新更新