我刚开始编写Prolog,并想知道如何以对以后的推理有用的方式陈述以下属性。
让我们假设有两个对象:对象1是红色,对象2具有不同的未指定颜色。如何向Prolog询问对象2的可能颜色?我希望是绿色和蓝色。
到目前为止,我的代码:
object(obj_1).
object(obj_2).
color_value(red).
color_value(green).
color_value(blue).
color(Obj, Val) :- object(Obj), color_value(Val).
color(obj_1, red).
different_color(O1, O2) :- color(O1, X), color(O2, Y), X \= Y.
different_color(obj_1, obj_2).
当我查询obj_2
的可能颜色时,Prolog包含red
。所以我以某种方式做错了。
color(obj_2, A).
A = red ;
A = green ;
A = blue.
我怀疑我使用color和different_color的方式有问题。
答案 0 :(得分:2)
您对color/1
的定义为color(_, red)
或color(obj_1, _)
提供了冗余解决方案。您的color(Obj, Val)
子句需要排除Obj
为obj_1
或Val
为red
的情况。
一种简单的方法可能是:
color(Obj, Val) :-
dif(Obj, obj_1),
dif(Val, red),
object(Obj),
color_value(Val).
color(obj_1, red).
另外,考虑@DavidTonhofer关于样式的评论。 :)