【发布时间】:2020-01-17 05:58:06
【问题描述】:
我是编写 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 的方式有问题。
【问题讨论】:
-
Stylewise,
color(Obj, Val) :- object(Obj), color_value(Val).是一种打字。在这种情况下你真的不需要它。更糟糕的是,它会干扰建立关于“对象-颜色”关系的事实。因为当你问“obj_1是否有颜色green”时,Prolog 会找到color(Obj, Val) :- object(Obj), color_value(Val).并说是,因为obj_1是一个对象,而green是一种颜色。而你真的想说“obj_1的颜色是red而没有其他颜色”:color(obj_1, red).
标签: prolog