Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 关于解决斑马型难题的建议_Prolog_Zebra Puzzle - Fatal编程技术网

Prolog 关于解决斑马型难题的建议

Prolog 关于解决斑马型难题的建议,prolog,zebra-puzzle,Prolog,Zebra Puzzle,我需要你的帮助来解决以下问题: 有3个女孩(安、苏珊、爱丽丝)需要选择穿什么颜色的鞋和衣服。鞋子和裙子有三种可能的颜色:白色、蓝色和绿色 主要条件: 安讨厌白色 苏珊穿着同一颜色的鞋子和衣服 爱丽丝有一双白色的鞋 爱丽丝和安的鞋子和衣服有不同的颜色 我的代码只满足2个条件;我很难满足苏珊穿同一颜色衣服的条件,而其他女孩需要穿不同颜色的衣服 以下是我的想法: PREDICATES girl(symbol) shoes(symbol,symbol) skirt(symbol,s

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

有3个女孩(安、苏珊、爱丽丝)需要选择穿什么颜色的鞋和衣服。鞋子和裙子有三种可能的颜色:白色、蓝色和绿色

主要条件:

  • 安讨厌白色
  • 苏珊穿着同一颜色的鞋子和衣服
  • 爱丽丝有一双白色的鞋
  • 爱丽丝和安的鞋子和衣服有不同的颜色
我的代码只满足2个条件;我很难满足苏珊穿同一颜色衣服的条件,而其他女孩需要穿不同颜色的衣服

以下是我的想法:

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).
上面的代码工作正常,但给出了太多的解决方案。另外,对于苏珊穿着同一颜色的鞋子和衣服的情况,我也无法想出任何合乎逻辑的解决方案


谢谢。

在我脑海中,我想到了以下几点:

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)).
我确实想知道是否有办法将子句传递给其他子句,因为
不同的鞋子和
不同的裙子在结构上是相同的

您可以这样初始化它:

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

如果我正确理解了这些条件,那么它们就不是舒兰所回答的

这将确保女孩穿着相同颜色的裙子和鞋子:

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

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

这是家庭作业吗?如果可以的话,只要让我们知道并告诉我们你到目前为止都做了些什么……事实上是这样。上面的代码就是我自己想出来的。老师只给了我们条件。我认为主要的问题是解决的逻辑。我已经想了两个小时了。这有点让我想自嘲:)别难过。我花了两个多小时完成了我的第一个“简单”序言任务。坚持下去。这是一种不同的思维方式。我很想帮助你,但这些知识多年前就离开了我的大脑……:)你能缩进你的遗嘱条款吗?
不(等于(A,B))
应该是
A\=B
,我认为通过条款是可能的,但不漂亮。我对条款有同样的想法,但在任何地方都找不到答案。你的版本仍然给出了19个解决方案,但我只需要3个。你的意思是应该只有3个解决方案吗?是的,其他解决方案只是重复的,或者不可能(女孩不能穿相同的鞋子或衣服)我在网上找到了类似问题的解决方案。就像我说的逻辑有点不同。谢谢大家的帮助。我将尝试开发我的解决方案:)想法是,对于相似的颜色,我们使用相应的从句(X,Y,Z):-girl(X),shoes(Y),dress(Z),X=susan,Y=green,YZ。这应该是为每个女孩定制的。还有解决方案条款:解决方案(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3):-X1=susan,correct(X1,Y1,Z1),X2=alice,correct(X2,Y2,Z2),X3=ann,correct(X3,Y3,Z3),Y1Y2,Y2Y3,Y1Y3,Z2Z2,Z3。这不就是我的代码中只有
的意思吗?另外,
dress()
应该是
skirt()
。我认为configurator的意思是该子句的逻辑必须绑定到“color”属性哦,我明白了。尽管如此,这看起来还是很像只穿(女孩)