在java中,我有一组相互连接的对象。让我们假设它们一起是一些模型,让我们这样称呼它。
我想根据某些规范(定义为一组条件)验证该模型。情况可能是这样的:
forall child in parent.children
child.name startswith "A"
可以有许多这样的条件,必须满足所有这些条件,这样才能说模型符合规范。所有的条件都是由变量和逻辑表达式组成的谓词,我想把它当作SAT问题的一个例子。
我不关心该解决方案的复杂性,我只想使用Prolog来执行寻找变量的适当替换(如果存在的话,这意味着模型符合规范)。
我正在寻找一种方法,如何轻松地创建Prolog知识库,该知识库将由表示创建模型的对象的语句组成。
你有什么值得推荐的吗?或者你可以提出解决这个问题的其他方法?
发布于 2016-06-11 08:08:28
也许JPL能帮你实现你的目标?
来自未完成的、包含错误的 文档。
JPL是一个使用SWI外部接口和Java接口的库,提供了Java和Prolog之间的双向接口,可以用于在Java中嵌入Prolog以及在Prolog中嵌入Java。在这两个设置中,它都提供了一个可重入的双向接口。
在文档中,还提供了一个使用ContentPane获取呼叫/4的示例。
jpl_call(F, getContentPane, [], CP),
查看jpl_call/4的文档,我们看到它的第一个参数可以是:
如果只想从Java模型中获取信息,而不是执行逻辑,则可以使用得到/3检索值。下面是一个示例,我们将Prolog变量Colour绑定到example.class.car类的静态最终example.class.car字段中保存的Java对象字段的引用。
jpl_get('example.class.car', colour, Colour)
更广泛地说:
jpl_get(+Class_or_Object, +Field, -Datum)
反之亦然,JPL还提供了从Java内部访问Prolog的功能,提供了用于在两种语言之间相互执行逻辑的双向接口。
如果你正在寻找一个更具体的答案来模拟你的问题,它确实会-as评论@Boris-对我们来说要容易得多--我们会提供一些很小的例子来说明你到底想达到什么。
祝好运!
https://stackoverflow.com/questions/37698626
复制相似问题