gpt4 book ai didi

java - 使用 JPL 制作并加载 SWI-Prolog 实例的副本

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:36 25 4
gpt4 key购买 nike

我想要做的是创建 Prolog 实例的副本并使用 JPL(Java-Prolog 接口(interface))加载该副本。我可以想到几种可能的方法来做到这一点,但没有一个能够完全解决,这就是我来这里的原因。

首先,我知道我可以使用 qsave_program/2 保存状态的副本。这将创建一个我可以运行的 exe 文件。但是,我需要使用 JPL 从 Java 查询这个保存的实例。我尝试寻找这方面的文档,但找不到任何文档(可能不是常见问题)。有什么方法可以运行使用 qsave_program/2 保存的实例并从 JPL 查询它?

第二个想法是查询原始实例中的所有动态断言子句。然而,我不知道断言的是什么,所以我不能直接要求这些东西,而是我必须基于它们是动态的事实来收集这些条款。然后我可以简单地从 JPL 启动另一个实例并断言这些事实来创建副本。这可能吗?这会有效地创建状态的副本吗?

最佳答案

好吧,这是我决定的解决方案。我可以通过以下查询找到需要重新断言的所有谓词:

predicate_property(X,dynamic),\+predicate_property(X,built_in),\+predicate_property(X,number_of_clauses(0))。

这就是为什么我认为这对我有用。predicate_property(X,dynamic) 将为我提供所有动态谓词。我之所以不在这里停止,是因为有很多动态谓词,我不需要在新的 prolog 实例中显式断言其子句。具有属性 built_in 的谓词可以被忽略,因为当我创建 prolog 查询的新实例时,这些谓词将被自动定义。即使用户明确定义了它们,该定义也会被重新实例化,因为我正在查阅同一文件。我还可以忽略那些没有子句的谓词 (number_of_clauses(0)),因为如果谓词没有子句,则它们不会影响状态。

因此,一旦我拥有了所需的所有动态谓词,我就可以找到这些谓词的所有解决方案,列出通过 JPL 在 Java 中返回的条款,打开文件的新查询,并重新断言这些条款。

关于java - 使用 JPL 制作并加载 SWI-Prolog 实例的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40850237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com