【发布时间】:2011-10-06 16:32:44
【问题描述】:
我需要您的帮助来解决以下问题:
有 3 个女孩(安、苏珊、爱丽丝)需要选择穿什么颜色的鞋子和衣服。鞋子和连衣裙有 3 种可能的颜色:白色、蓝色和绿色。
主要条件:
- 安讨厌白色。
- 苏珊穿着同色的鞋子和连衣裙。
- 爱丽丝有一双白鞋。
- Alice 和 Ann 的鞋子和衣服有不同的颜色。
我的代码只满足两个条件;对于 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).
上面的代码工作正常,但提供了太多的解决方案。另外,对于苏珊穿同色鞋子和衣服的条件,我想不出任何合乎逻辑的解决方案。
谢谢。
【问题讨论】:
-
这是作业吗?如果是的话也没关系,只要让我们知道并告诉我们您到目前为止尝试过什么......
-
确实如此。上面的代码是我自己想出来的。老师只给了我们条件。我认为主要问题是解决方案的逻辑。我已经考虑了2个小时。有点让我想为此嘲笑自己:)
-
别难过。我在我的第一个“简单”序言任务上花了两个多小时。坚持下去。这是一种不同的思维方式。我很乐意帮助你,但所有这些知识几年前就已经离开了我的大脑...... :)
-
你能缩进你的 will_wear 子句吗?
标签: prolog zebra-puzzle