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