1

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

例如,可能的规则:

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

传感系统产生如下谓词:

canSee(plane).
obstacleDist(3.5).

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

问题是,如果(例如)canSee谓词不是由传感器产生的,prolog在查看规则do(shoot(E))时会抱怨Undefined procedure

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

有任何想法吗?

4

1 回答 1

3

您需要一些谓词声明。要么通过指令:- dynamic(canSee/1).,要么通过类似的规则canSee(_):-false.

于 2014-11-10T11:05:43.950 回答