gpt4 book ai didi

java - 如何使用 JPL 在 java 和 prolog 之间共享对象状态?

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:51 25 4
gpt4 key购买 nike

我想用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之间共享一个对象状态。

最佳答案

要从 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的文档,我们看到它的第一个参数可以是:

  • a type, class object or classname (for static methods of the denoted class, or for static or instance methods of java.lang.Class)
  • a class instance or array (for static or instance methods)

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

随后,您可以使用 jpl_get/3 访问 Java 模型,而不是执行逻辑。 。下面的示例显示了我们将 Prolog 变量 Color 绑定(bind)到 example.class.car 类的静态最终 .colour 字段中保存的 Java 汽车对象字段的引用。

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

更一般地说:

jpl_get(+Class_or_Object, +Field, -Datum)

希望这有帮助。

祝你好运!

关于java - 如何使用 JPL 在 java 和 prolog 之间共享对象状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com