繁体   English   中英

如何使用JPL在Java和Prolog之间共享对象状态?

[英]How to share an object state between java and prolog with JPL?

我想在Java中创建一个对象:

MyObject obj = new MyObject ();

我想通过jpl查询将其传递给序言。

我怎样才能完成Java到Prolog对象的传递?

我知道我可以在这样的序言文件中使用jpl_new:

execMethod :-
  jpl_new('my_package.MyObject', [], Object),
  jpl_call(Object, myMethod, [], _ ).

但是,我想避免jpl_new调用,而只是将jpl_call与Java对象obj一起使用。

反过来说, 我该如何完成Java对象传递的序幕?

我的意思是将通过jpl_new调用创建的对象传递给Java。

换句话说,我想在java和prolog之间共享一个对象状态。

要从Java内部访问Prolog知识库,可以使用JPL查询。 让我们看下面一个简单的例子:

% Knowledge base (Prolog)
foo(x,bar).

all_foo(X,Y) :- foo(X,Y).

在Java中,我们可以这样写:

String query = "all_foo(x,Y)";
System.out.println("First solution: " + Query.oneSolution(query).get("Y"));

它会在Y中返回“ bar”作为答案。

反之亦然-正如您在问题中所显示的-当我们想从Prolog文件中访问Java功能时,可以使用JPL。

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

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

因此,您可以自由地将类信息传递给jpl_call / 4以执行某些方法。

随后,您可以使用jpl_get / 3来访问Java模型,而不是执行逻辑。 下面显示了一个示例,其中我们将Prolog变量Color绑定到example.class.car类的static final .colour字段中保存的Java car对象的字段的引用。

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

更普遍:

jpl_get(+Class_or_Object, +Field, -Datum)

希望这会有所帮助。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM