簡體   English   中英

如何使用JPL在Java和Prolog之間共享對象狀態?

[英]How to share an object state between java and prolog with JPL?

我想在Java中創建一個對象:

MyObject obj = new MyObject ();

我想通過jpl查詢將其傳遞給序言。

我怎樣才能完成Java到Prolog對象的傳遞?

我知道我可以在這樣的序言文件中使用jpl_new:

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

但是,我想避免jpl_new調用,而只是將jpl_call與Java對象obj一起使用。

反過來說, 我該如何完成Java對象傳遞的序幕?

我的意思是將通過jpl_new調用創建的對象傳遞給Java。

換句話說,我想在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"));

它會在Y中返回“ bar”作為答案。

反之亦然-正如您在問題中所顯示的-當我們想從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)

希望這會有所幫助。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM