我需要您的帮助来解决以下问题:
有 3 个女孩(安、苏珊、爱丽丝)需要选择穿什么颜色的鞋子和衣服。鞋子和连衣裙有 3 种可能的颜色:白色、蓝色和绿色。
主要条件:
- 安讨厌白色。
- 苏珊穿着同色的鞋子和裙子。
- 爱丽丝有一双白鞋。
- 爱丽丝和安的鞋子和衣服有不同的颜色。
我的代码只满足两个条件;对于苏珊来说,我很难满足相同颜色的条件,而其他女孩需要不同颜色的衣服。
这是我想出的:
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).
上面的代码工作正常,但提供了太多的解决方案。另外,对于苏珊穿同色鞋子和衣服的条件,我想不出任何合乎逻辑的解决方案。
谢谢。