Я хочу использовать JPL, чтобы получить результат trace/0
запроса.
Я попытался выполнить следующие шаги через swi-пролог в консоли, и это сработало.
set_prolog_flag(color_term, true).
working_directory(_,"MY_PROJECT_PATH").
leash(+all).
visible(-all).
protocol("./trace_out_put.txt").
trace.
safe_to_stack(obj1, obj2)
% это запрос на трассировку
nodebug.
noprotocol.
После этих шагов результаты трассировки помещаются в файл «trace_out_put.txt» под моим путем к проекту.
Используя JPL7, я попробовал следующий код для этих запросов выше.
String[] queries = {
"set_prolog_flag",
"working_directory",
"leash",
"visible",
"protocol",
"trace",
"safe_to_stack(obj1,obj2).",
"nodebug",
"noprotocol"
};
Term[][] param = {
new Term[]{new Atom("color_term"),new Atom("false")},
new Term[]{new Variable("_"), new Atom( "/Users/bobhu/project/prologebg","text")},
new Term[]{new Atom("+all")},
new Term[]{new Atom("-all")},
new Term[]{new Atom("./trace_output.txt","text")},
new Term[]{},
new Term[]{},
new Term[]{},
new Term[]{}
};
Query[] allQuery = new Query[queries.length];
for (int i = 0; i < queries.length; i++) {
allQuery[i] = new Query(queries[i], param[i]);
System.out.println(allQuery[i]);
try {
System.out.println(allQuery[i].hasSolution());
}catch(Exception e) {
System.out.println("wrong at "+ i);
}
}
По сути, он выполняет запрос один за другим.
В выходных данных отображаются leash
и visible
с исключениями, которые отличаются от выходных данных консоли:
set_prolog_flag( color_term, false )
true
working_directory( _, '/Users/bobhu/project/prologebg' )
true
leash( '+all' )
wrong at leash( '+all' )
visible( '-all' )
wrong at visible( '-all' )
protocol( './trace_output.txt' )
true
trace( )
true
Call: (1) atom_to_term('safe_to_stack(obj1,obj2).', _82, _84) ?
Более того, выполнение для trace
также было не таким, как ожидалось, и выполнение застряло здесь, ожидая продолжения моего отклика клавиатуры ENTER
.
Я проверил, что leash/1
в swi-прологе должно быть в форме leash(?Ports)
, поэтому передача Atom
вместо Port
в leash
неверна, однако я не могу найти другой способ сделать это.
Как я могу сделать все это автоматически через JPL? Или есть какие-то другие подходы для получения вывода трассировки на консоль?