在Prolog中处理动态谓词的正确方法

时间:2014-11-10 10:11:20

标签: prolog

我正在为机器人系统编写知识库。 系统实际上由两部分组成:KB中的规则和传感器读数生成的一组谓词。

例如,可能的规则:

do(stop) :- obstacleDist(N), N<1.
do(shoot(E)) :- canSee(E), enemy(E).

传感系统产生如下谓词:

canSee(plane).
obstacleDist(3.5).

工作流程包括查询传感器生成的谓词,咨询规则引擎,然后查询要执行的操作。 (例如做(X)。)

问题在于,如果(例如) canSee 谓词不是由传感器产生的,prolog会在查看规则未定义过程 >做(拍(E))

可能的解决方法是在规则中生成基本谓词列表(例如 canSee(nothing)),但我不确定这是最好的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您需要为谓词声明一些。通过指令:- dynamic(canSee/1).或通过canSee(_):-false.

等规则