我想在java中创建一个对象:
MyObject obj = new MyObject ();
我希望通过jpl查询将其传递给prolog。
如何完成java到prolog对象的传递?
我知道我可以在这样的prolog文件中使用jpl_new:
execMethod :-
jpl_new('my_package.MyObject', [], Object),
jpl_call(Object, myMethod, [], _ ).
但是,我想避免jpl_new调用,只需将jpl_call与java对象obj一起使用。
转而言, 如何完成java对象传递的prolog?
我的意思是传递给java,用jpl_new调用创建的对象。
换句话说,我想在java和prolog之间共享一个对象状态。
答案 0 :(得分:0)
要从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"));
会返回' bar'作为Y的答案。
反之亦然 - 您在问题中表示 - 当我们想要从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)
希望这会有所帮助。
祝你好运!