0

在java中,我有一组相互连接的对象。让我们假设它们在一起是一些模型,让我们这样称呼它。

我想根据一些规范(定义为一组条件)验证该模型。条件可能是这样的:

forall child in parent.children
    child.name startswith "A"

可以有很多这样的条件,并且必须满足所有这些条件才能说模型符合规范。所有的条件都是一些由变量和逻辑表达式组成的谓词,我想处理的是 SAT 问题的一个实例。

我不关心该解决方案的复杂性,我只想使用 Prolog 来执行查找适当的变量替换(如果存在,则意味着模型符合规范)。

我正在寻找一种如何轻松创建 Prolog 知识库的方法,该知识库将由代表创建我的模型的对象的语句组成。

你有什么值得推荐的吗?或者,也许您可​​以建议一些其他方法来解决该问题?

4

1 回答 1

0

也许 JPL 可以帮助您实现目标?

从未完成的、包含错误的 文档中:

JPL 是一个使用 SWI-Prolog 外部接口和 Java jni 接口的库,提供 Java 和 Prolog 之间的双向接口,可用于在 Java 中嵌入 Prolog 以及在 Prolog 中嵌入 Java。在这两种设置中,它都提供了一个可重入的双向接口。

在文档中更进一步,使用jpl_call/4提供了获取 ContentPane 的示例:

jpl_call(F, getContentPane, [], CP),

查看 jpl_call/4 的文档,我们看到它的第一个参数可以是:

  • 类型、类对象或类名(用于表示类的静态方法,或用于 java.lang.Class 的静态或实例方法)
  • 类实例或数组(用于静态或实例方法)

如果您只想从 Java 模型中获取信息而不是执行逻辑,则可以使用jpl_get/3检索值。下面的示例显示了我们将 Prolog 变量 Color 绑定到 Java car 对象的字段的引用,该对象字段保存在 example.class.car 类的静态 final .colour 字段中。

jpl_get('example.class.car', colour, Colour)

更普遍:

jpl_get(+Class_or_Object, +Field, -Datum)

反之亦然,JPL 还提供从 Java 内部访问 Prolog 的功能,提供双向接口以用于在两种语言之间相互执行逻辑。

如果您正在寻找关于建模您的问题的更具体的答案,它确实会 - 正如@Boris 评论的那样 - 对我们来说会更容易提供一些最小的示例来显示您究竟想要达到什么。

祝你好运!

于 2016-06-11T08:08:28.007 回答