如何在Prolog中编写包含事实的查询

问题描述 投票:0回答:1

我正在实现一个程序,需要以某种方式将事实添加到“Prolog”查询中。但我不知道该怎么做。 例如: 在我的“Prolog”数据库中,我有一条规则:

engineer(X) :-
    employee(X,department_a).

现在我想检查 Jack 是否是工程师,所以查询将是:

engineer(jack).

要使此查询成功,数据库中应该存在如下事实:

employee(jack,department_a).
。 然而,在我的程序中,我不想将这个事实添加(或断言)到数据库中,因为我正在开发的程序是一个分布式系统,因此数据库不知道jack属于哪个部门。换句话说,我正在寻找某种方法,可以使 prolog 引擎根据自己的数据库和给定的事实进行推导(给定的事实不存储在数据库中,而是与查询一起存储)。

有什么办法可以做到吗?任何建议表示赞赏。

prolog
1个回答
-1
投票

您可以将事实和规则放入不同的 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

当然如果你用相同的规则加载不同的事实, 您的查询可能会得到不同的结果。

如果您实在不想咨询某些内容 命令行,而是在期间临时断言事实 查询执行时,您应该研究假设推理

© www.soinside.com 2019 - 2024. All rights reserved.