1

Javaでオブジェクトを作成したい:

MyObject obj = new MyObject ();

jplクエリでプロローグに渡したいです。

オブジェクトの受け渡しをプロローグするために Java を実行するにはどうすればよいですか?

次のようなプロローグ ファイルで jpl_new を使用できることを知っています。

execMethod :-
  jpl_new('my_package.MyObject', [], Object),
  jpl_call(Object, myMethod, [], _ ).

しかし、jpl_new 呼び出しを避け、java オブジェクト obj で jpl_call を使用したいだけです。

逆に、 プロローグからJavaオブジェクトへの受け渡しを実現するにはどうすればよいですか?

つまり、jpl_new 呼び出しで作成されたオブジェクトを Java に渡します。

つまり、Java と Prolog の間でオブジェクトの状態を共有したいのです。

4

1 に答える 1

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"));

Y の答えとして「バー」を返します。

逆に-質問で示したように-JPLは、Prologファイル内からJava機能にアクセスしたいときに使用できます。

まず、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)

これが役に立ったことを願っています。

幸運を!

于 2016-06-11T08:29:11.877 に答える