在java中,我有一组相互连接的对象。让我们假设他们一起是一些模型,让我们这样称呼它。
我想根据某些规范验证该模型(定义为一组条件)。条件可能是这样的:
forall child in parent.children
child.name startswith "A"
可能存在大量此类条件,并且必须满足所有这些条件才能说模型符合规范。所有条件都是由变量和逻辑表达式组成的一些谓词,我想要处理的是SAT问题的一个实例。
我不关心该解决方案的复杂性,我只是想使用Prolog来执行变量的正确替换(如果它存在意味着模型符合规范)。
我正在寻找一种方法如何轻松创建Prolog知识库,该知识库将包含表示创建模型的对象的语句。
你有什么值得推荐的吗?或者也许您可以建议一些其他方法来解决这个问题?
答案 0 :(得分:0)
也许JPL可以帮助您实现目标?
来自未完成,包含错误 docs:
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绑定到example.class.car类的static final .colour字段中保存的Java car对象的字段的引用。
jpl_get('example.class.car', colour, Colour)
更一般地说:
jpl_get(+Class_or_Object, +Field, -Datum)
反之亦然JPL还提供了从Java内部访问Prolog的功能,提供了双向接口,可以在两种语言之间相互执行逻辑。
如果您正在寻找关于问题建模的更具体的答案,那么@ Boris评论确实会更容易,我们会提供一些最小的例子来说明您想要达到的目的。
祝你好运!