首页 > 解决方案 > Prolog问题建模:不同颜色的对象

问题描述

我是编写 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.

我怀疑我使用颜色和不同颜色的方式有问题。

标签: prolog

解决方案


Your definition of color/1 offers redundant solutions for color(_, red) or color(obj_1, _). Your clause for color(Obj, Val) needs to exclude the case where Obj is obj_1 or Val is red.

A simplistic approach could be:

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

Also, consider @DavidTonhofer's comment about style. :)


推荐阅读