2012-04-03 2 views
2

Я использую tuProlog интегрировать Пролог с Java, чтобы сделать так I'v был определен .pl файл, содержащим этот код:tuProlog неизвестно поведение

go:-write('hello world!'),nl. 

В моей Java файле в NetBeans У меня есть Класс Main, который вызывает это:

Prolog engine = new Prolog(); 

Theory theory = new Theory(new FileInputStream("facultad.pl")); 

try { 
      engine.setTheory(theory); 
     } catch (InvalidTheoryException ex) { 

     } 
SolveInfo solution = engine.solve("go."); 

if (solution.isSuccess()) { 

    System.out.println(solution.getSolution()); 
} 

Этот кодекс должен «привет мир» возвращается, но вместо того, что это ответ «идти», любые идеи по поводу этого непредсказуемого поведения?

+0

@ProfVersaggi, пожалуйста, мне нужна ваша помощь! –

+0

Я собирался выписать почти этот точный вопрос! :) – Joe

ответ

1

Наконец-то я обнаружил, что это поведение не является неустойчивым.

Решение состоит в том, чтобы добавить этот код непосредственно перед вызовом метода Solve.

engine.addOutputListener (новый OutputListener() {

 @Override 
     public void onOutput(OutputEvent e) { 
      finalResult += e.getMsg(); 

     } 
    }); 

finalResult это глобальная переменная, которая содержит возвращаемую строку произведенный Пролог инструкции Write.

Это все, что я имею н сделанный класс, если он нуждается в их реализации, просто напишите мне письмо jrguzman (at) estudiantes (точка) uci (точка) cu

С уважением.

0

Я не знаю о tuProlog/Java, но при вызове Swi-Prolog из PHP я должен поставить «halt» в качестве заключительной инструкции предиката, чтобы сообщить Prolog о выходе и возврате управления обратно на php.

go:-write('hello world!'),nl, halt. 
1

Ваше решение это (правильно) преуспели Пролог (Go/0), что вы ожидаете («привет мир!») Это выход из встроенных команд, как таковой, вы должны проверить «стандартный вывод» из ваш Java-движок.

В противном случае запрограммируйте свою программу на «возврат» информации в переменных.

go(X) :- X = 'hello world!'. 

Затем tuProlog предоставит методы для доступа к переменным instanced.