Я пытался использовать библиотеку gnu prolog для java для выполнения файла пролога.Мне удалось заставить его работать для базового предиката, но когда я пытаюсь разобрать список выходных данных механизма пролога, он не работает правильно.
Мой код Java выглядит следующим образом:
gnu.prolog.vm.Environment environment = new Environment();
environment.ensureLoaded(AtomTerm.get(PrologTest.class.getResource("main.pro").getFile()));
gnu.prolog.vm.Interpreter interp = environment.createInterpreter();
environment.runInitialization(interp);
Term[] listElements = { new IntegerTerm(1), new IntegerTerm(2)};
Term termElements = new CompoundTerm(TermConstants.listTag, listElements);
Term[] listElements2 = { new IntegerTerm(1), new IntegerTerm(2)};
Term termElements2 = new CompoundTerm(TermConstants.listTag, listElements2);
Term[]argumentsQuestion = {termElements,termElements2};
CompoundTerm goalTerm = new CompoundTerm(AtomTerm.get("same"), argumentsQuestion);
int rc;
Interpreter.Goal goal = interp.prepareGoal(goalTerm);
rc = interp.execute(goal);
System.out.println("rc value"+rc);
if (rc == PrologCode.SUCCESS || rc == PrologCode.SUCCESS_LAST)
{ System.out.println("OK"); }else{
System.out.println("error"); }
Мой файл main.pro содержит следующий предикат:
same([H1|R1], [H2|R2]):- H1 is H2 , same (R1,R2).
same([], []) :- true.
Проблема в том, что значение rc всегда равно -1.Я попытался изменить файл main.pro следующим образом:
same([H1|R1], [H2|R2]):- H1 is H2.
same([], []) :- true.
В этом случае программа работает правильно, поэтому программа правильно анализирует список и правильно читает первое значение списка.