我正在为机器人系统编写知识库。 系统实际上由两部分组成: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)),但我不确定这是最好的方法。
有什么想法吗?
答案 0 :(得分:3)
您需要为谓词声明一些。通过指令:- dynamic(canSee/1).
或通过canSee(_):-false.