[英]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.