将Java对象映射到Prolog表示

时间:2016-06-08 09:32:33

标签: java prolog sat

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

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

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

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

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

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

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

1 个答案:

答案 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评论确实会更容易,我们会提供一些最小的例子来说明您想要达到的目的。

祝你好运!