[英]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.