Как получить результат трассировки пролога с помощью JPL? - PullRequest
0 голосов
/ 08 июня 2019

Я хочу использовать 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? Или есть какие-то другие подходы для получения вывода трассировки на консоль?

1 Ответ

0 голосов
/ 08 июня 2019

Этот комментарий размещен в поле ответа, поскольку необходимое форматирование не работает в комментарии.Не голосуйте с повышением.

При выполнении кода у вас есть

1. "set_prolog_flag",
2. "working_directory",
3. "leash",
4. "visible",
5. "protocol",
6. "trace",
7. "safe_to_stack(obj1,obj2).",
8. "nodebug",
9. "noprotocol"

с параметрами

1. new Term[]{new Atom("color_term"),new Atom("false")},
2. new Term[]{new Variable("_"), new Atom( "/Users/bobhu/project/prologebg","text")},
3. new Term[]{new Atom("+all")},
4. new Term[]{new Atom("-all")},
5. new Term[]{new Atom("./trace_output.txt","text")},
6. new Term[]{},
7. new Term[]{},
8. new Term[]{},
9. new Term[]{}

Обратите внимание, что с кодом Java это

3. "leash",
3. new Term[]{new Atom("+all")},

и

4. "visible",
4. new Term[]{new Atom("-all")},

Попробуйте поменять местами +all и -all

См .: Wiki: Как - протокол / 1

...