我需要你帮助解决以下问题:
有3个女孩(Ann,Susan,Alice)需要选择穿什么颜色的鞋子和衣服。鞋子和连衣裙有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).
上面的代码工作正常,但提供了太多的解决方案。另外,我无法想出任何合理的解决方案,以便苏珊穿着相同颜色的鞋子和衣服。
感谢。
答案 0 :(得分:1)
在我的脑海中,我正在思考这些问题:
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_shoes
和different_skirts
的结构相同。
你会像这样初始化它:
only_wears(ann, white).
different_shoes(alice, ann).
different_skirt(alice, ann).
答案 1 :(得分:1)
如果我正确理解了这些条件,那么他们就不是Shurane的回答了。
这将确保女孩穿着相同颜色的衣服和鞋子:
same_color(Girl) :-
shoes(Girl, Color),
dress(Girl, Color).
我会将不同的颜色作为练习,但暗示说两件事与你说A \= B
不一样。如果您在使用different_color时遇到困难,请发表评论 - 并告诉我您尝试了什么。