首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java和prolog之间与JPL共享对象状态?

如何在java和prolog之间与JPL共享对象状态?
EN

Stack Overflow用户
提问于 2015-07-24 13:00:17
回答 1查看 241关注 0票数 1

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

代码语言:javascript
复制
MyObject obj = new MyObject ();

我想通过一个jpl查询将它传递给prolog。

如何实现java到prolog对象的传递?

我知道我可以在下面这样的prolog文件中使用jpl_new:

代码语言:javascript
复制
execMethod :-
  jpl_new('my_package.MyObject', [], Object),
  jpl_call(Object, myMethod, [], _ ).

但是,我希望避免jpl_new调用,只需将jpl_call与java对象obj一起使用。

同时,如何实现prolog到java对象的传递?

我的意思是传递给java,即用jpl_new调用创建的对象。

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

EN

回答 1

Stack Overflow用户

发布于 2016-06-11 08:29:11

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

代码语言:javascript
复制
% Knowledge base (Prolog)
foo(x,bar).

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

在java中,我们可以编写:

代码语言:javascript
复制
String query = "all_foo(x,Y)";
System.out.println("First solution: " + Query.oneSolution(query).get("Y"));

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

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

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

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

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

随后,您可以访问Java模型,而不是使用得到/3执行逻辑。下面是一个示例,我们将Prolog变量Colour绑定到example.class.car类的静态最终example.class.car字段中保存的Java对象字段的引用。

代码语言:javascript
复制
jpl_get('example.class.car', colour, Colour)

更广泛地说:

代码语言:javascript
复制
jpl_get(+Class_or_Object, +Field, -Datum)

希望这能帮上忙。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31611202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档