2015-07-24 8 views
1

Я хочу, чтобы создать объект в Java:Как разделить состояние объекта между java и прологом с помощью JPL?

MyObject obj = new MyObject(); 

, и я хочу передать его Prolog с запросом JPL.

Как я могу выполнить передачу java для прогона объекта?

Я знаю, что я мог бы использовать jpl_new в прологе файл, как это:

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

Но я хочу, чтобы избежать jpl_new вызов и просто использовать jpl_call с объектом Java OBJ.

И, наоборот, Как я могу выполнить пролог для передачи Java-объектов?

Я имею в виду переход к java, объекты, созданные с помощью jpl_new вызова.

Другими словами, я хочу разделить состояние объекта между java и прологом.

ответ

0

Чтобы получить доступ к базе знаний Prolog из Java, вы можете использовать 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 можно использовать, когда мы хотим получить доступ к функциям Java из файла Prolog.

Во-первых, глядя на документы из jpl_call/4, мы видим, что первые его аргументы могут быть:

  • тип, класс объекта или имя_класса (для статических методов Обозначенные класса, или для статического или методы экземпляра java.lang.Class)
  • экземпляр класса или массив (для статических или экземпляра методов)

Таким образом, вы свободны в как передать информацию о классе в jpl_call/4 для выполнения определенных методов.

Впоследствии вы можете получить доступ к своей Java-модели, а не выполнять логику, используя jpl_get/3. Ниже показан пример, где мы привязываем переменную Color Prolog к ссылке поля объекта автомобиля Java, хранящегося в статическом финальном поле .colour класса example.class.car.

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

Более общо:

jpl_get(+Class_or_Object, +Field, -Datum) 

Надеется, что это помогло.

Удачи вам!

 Смежные вопросы

  • Нет связанных вопросов^_^