我想在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一起使用。
同时,如何实现prolog到java对象的传递?
我的意思是传递给java,即用jpl_new调用创建的对象。
换句话说,我希望在java和prolog之间共享一个对象状态。
发布于 2016-06-11 08:29:11
要从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文件中访问-as功能时,可以使用您在问题中显示的JPL。
首先,查看呼叫/4的文档,我们看到它的第一个参数可以是:
因此,您可以自由地将类信息传递给jpl_call/4以执行某些方法。
随后,您可以访问Java模型,而不是使用得到/3执行逻辑。下面是一个示例,我们将Prolog变量Colour绑定到example.class.car类的静态最终example.class.car字段中保存的Java对象字段的引用。
jpl_get('example.class.car', colour, Colour)更广泛地说:
jpl_get(+Class_or_Object, +Field, -Datum)希望这能帮上忙。
祝好运!
https://stackoverflow.com/questions/31611202
复制相似问题