Prolog问题建模:具有不同颜色的对象

时间:2020-01-16 15:45:51

标签: prolog

我刚开始编写Prolog,并想知道如何以对以后的推理有用的方式陈述以下属性。

  • 有N个对象。
  • 每个对象都有一种颜色。
  • 共有三种颜色:红色,绿色,蓝色

让我们假设有两个对象:对象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的方式有问题。

1 个答案:

答案 0 :(得分:2)

您对color/1的定义为color(_, red)color(obj_1, _)提供了冗余解决方案。您的color(Obj, Val)子句需要排除Objobj_1Valred的情况。

一种简单的方法可能是:

color(Obj, Val) :-
    dif(Obj, obj_1),
    dif(Val, red),
    object(Obj),
    color_value(Val).
color(obj_1, red).

另外,考虑@DavidTonhofer关于样式的评论。 :)

相关问题