В Windows с помощью SWI-Prolog вы можете использовать protocol/1
protocol/1 скопирует вывод, который идет на экран в файл. Таким образом, если вы запустите trace/0 и результат будет на экран, копия будет отправлена в файл. Чтобы упростить запись полного пути для protocol/1, мне проще установить текущий рабочий каталог, используя working_directory/2, а затем установите только конкретный файл с протоколом/1.
Пример
Для этого примера создайте файл, например.
trace_example.pl
и добавьте некоторые факты и предикаты, чтобы продемонстрировать трассировку.
parent(ann,helen).
parent(helen,henry).
parent(henry,mary).
ancestor(X,Y) :- parent(X,Y).
ancestor(X,Y) :- parent(X,Z),
ancestor(Z,Y).
Откройте верхний уровень SWI-Prolog и используйте consult/1 для загрузить файл
consult("C:/ ... /trace_example.pl").
Н.Б. Разделители каталогов / не \. При необходимости измените их.
Поскольку терминал SWI-Prolog в Windows по умолчанию будет использовать цвет с трассировкой, что добавит ненужные управляющие последовательности в выходной файл set_prolog_flag/2 необходимо запустить, чтобы отключить цвет.
?- set_prolog_flag(color_term,false).
true.
Убедитесь, что терминал не использует цвет.
?- current_prolog_flag(color_term,X).
X = false.
Быстрый прогон для проверки предиката и фактов
?- ancestor(ann,henry).
true ;
false.
Теперь установите текущий рабочий каталог, в котором будет создан выходной файл.
?- working_directory(_,"C:/Users/Eric/Documents/Prolog").
и убедитесь, что изменение произошло
?- working_directory(CWD,CWD).
CWD = 'c:/users/eric/documents/prolog/'.
Поскольку я не хочу нажимать пробел для каждого вывода трассировки, я отключаю взаимодействие с пользователем для всех портов отладки, используя поводок/1
?- leash(-all).
и поскольку я хочу видеть все выходные данные всех портов отладки, я включаю их все с помощью видимый/1
?- visible(+all).
Включить копирование экрана в файл
?- protocol("./trace_output.txt").
запустить трассировщик
?- trace.
и запустите запрос для трассировки
?- ancestor(ann,henry).
Call: (8) ancestor(ann, henry) ? creep
Call: (9) parent(ann, henry) ? creep
Fail: (9) parent(ann, henry) ? creep
Redo: (8) ancestor(ann, henry) ? creep
Call: (9) parent(ann, _1124) ? creep
Exit: (9) parent(ann, helen) ? creep
Call: (9) ancestor(helen, henry) ? creep
Call: (10) parent(helen, henry) ? creep
Exit: (10) parent(helen, henry) ? creep
Exit: (9) ancestor(helen, henry) ? creep
Exit: (8) ancestor(ann, henry) ? creep
true ;
Redo: (9) ancestor(helen, henry) ? creep
Call: (10) parent(helen, _1124) ? creep
Exit: (10) parent(helen, henry) ? creep
Call: (10) ancestor(henry, henry) ? creep
Call: (11) parent(henry, henry) ? creep
Fail: (11) parent(henry, henry) ? creep
Redo: (10) ancestor(henry, henry) ? creep
Call: (11) parent(henry, _1124) ? creep
Exit: (11) parent(henry, mary) ? creep
Call: (11) ancestor(mary, henry) ? creep
Call: (12) parent(mary, henry) ? creep
Fail: (12) parent(mary, henry) ? creep
Redo: (11) ancestor(mary, henry) ? creep
Call: (12) parent(mary, _1124) ? creep
Fail: (12) parent(mary, _1124) ? creep
Fail: (11) ancestor(mary, henry) ? creep
Fail: (10) ancestor(henry, henry) ? creep
Fail: (9) ancestor(helen, henry) ? creep
Fail: (8) ancestor(ann, henry) ? creep
false.
закончить отслеживание
?- nodebug.
и завершите копирование экрана в файл
?- noprotocol.
Теперь откройте файл C:\Users\Eric\Documents\Prolog\trace_output.txt
true.
10 ?- trace.
true.
[trace] 10 ?- ancestor(ann,henry).
Call: (8) ancestor(ann, henry)
Unify: (8) ancestor(ann, henry)
Call: (9) parent(ann, henry)
Fail: (9) parent(ann, henry)
Redo: (8) ancestor(ann, henry)
Unify: (8) ancestor(ann, henry)
Call: (9) parent(ann, _6466)
Unify: (9) parent(ann, helen)
Exit: (9) parent(ann, helen)
Call: (9) ancestor(helen, henry)
Unify: (9) ancestor(helen, henry)
Call: (10) parent(helen, henry)
Unify: (10) parent(helen, henry)
Exit: (10) parent(helen, henry)
Exit: (9) ancestor(helen, henry)
Exit: (8) ancestor(ann, henry)
true ;
Redo: (9) ancestor(helen, henry)
Unify: (9) ancestor(helen, henry)
Call: (10) parent(helen, _6466)
Unify: (10) parent(helen, henry)
Exit: (10) parent(helen, henry)
Call: (10) ancestor(henry, henry)
Unify: (10) ancestor(henry, henry)
Call: (11) parent(henry, henry)
Fail: (11) parent(henry, henry)
Redo: (10) ancestor(henry, henry)
Unify: (10) ancestor(henry, henry)
Call: (11) parent(henry, _6466)
Unify: (11) parent(henry, mary)
Exit: (11) parent(henry, mary)
Call: (11) ancestor(mary, henry)
Unify: (11) ancestor(mary, henry)
Call: (12) parent(mary, henry)
Fail: (12) parent(mary, henry)
Redo: (11) ancestor(mary, henry)
Unify: (11) ancestor(mary, henry)
Call: (12) parent(mary, _6466)
Fail: (12) parent(mary, _6466)
Fail: (11) ancestor(mary, henry)
Fail: (10) ancestor(henry, henry)
Fail: (9) ancestor(helen, henry)
Fail: (8) ancestor(ann, henry)
false.
[trace] 11 ?- nodebug.
true.
12 ?- noprotocol.
person
Guy Coder
schedule
27.03.2017