我正在实现一个程序,需要以某种方式将事实添加到“Prolog”查询中。但我不知道该怎么做。 例如: 在我的“Prolog”数据库中,我有一条规则:
engineer(X) :-
employee(X,department_a).
现在我想检查 Jack 是否是工程师,所以查询将是:
engineer(jack).
要使此查询成功,数据库中应该存在如下事实:
employee(jack,department_a).
。
然而,在我的程序中,我不想将这个事实添加(或断言)到数据库中,因为我正在开发的程序是一个分布式系统,因此数据库不知道jack属于哪个部门。换句话说,我正在寻找某种方法,可以使 prolog 引擎根据自己的数据库和给定的事实进行推导(给定的事实不存储在数据库中,而是与查询一起存储)。
有什么办法可以做到吗?任何建议表示赞赏。
您可以将事实和规则放入不同的 Prolog 文本文件中 如果你想。并自由混合不同的Prolog文本文件 加载时从命令行。
例如,您可以执行以下操作:
文件1:foo.p
engineer(X) :-
employee(X,department_a).
文件2:bar.p
employee(jack,department_a)
然后你可以在命令行上执行:
?- [foo, bar].
Yes
?- engineer(jack).
Yes
?- engineer(jill).
No
当然如果你用相同的规则加载不同的事实, 您的查询可能会得到不同的结果。
如果您实在不想咨询某些内容 命令行,而是在期间临时断言事实 查询执行时,您应该研究假设推理。