如果您将跟踪捕获到本节之后概述的文件中,然后将行注释添加到您的代码并将代码行与跟踪相关联,您将获得类似的结果。
r([1,2,6], [], L) % Goal
r([], X, X). % Line 1
r([X|Y], X2, X3) :- % Line 2
r(Y, [X|X2], X3). % Line 3
Call: (11) r([1, 2, 6], [] , _32640 ) % Goal
Unify: (11) r([1, 2, 6], [] , _32640 ) % Line: 2
Call: (12) r([2, 6] , [1] , _32640 ) % Line: 3
Unify: (12) r([2, 6] , [1] , _32640 ) % Line: 2
Call: (13) r([6] , [2, 1] , _32640 ) % Line: 3
Unify: (13) r([6] , [2, 1] , _32640 ) % Line: 2
Call: (14) r([] , [6, 2, 1], _32640 ) % Line: 3
Unify: (14) r([] , [6, 2, 1], [6, 2, 1]) % Line: 1
Exit: (14) r([] , [6, 2, 1], [6, 2, 1]) % Line: 1
Exit: (13) r([6] , [2, 1] , [6, 2, 1]) % Line: 3
Exit: (12) r([2, 6] , [1] , [6, 2, 1]) % Line: 3
Exit: (11) r([1, 2, 6], [] , [6, 2, 1]) % Line: 3
使用protocol/0 将跟踪捕获到文件。
文件:examples.pl
:- module(examples,
[
example/1
]).
r([], X, X).
r([X|Y], X2, X3) :-
r(Y, [X|X2], X3).
example(1) :-
r([1,2,6], [], L),
format('~w~n',[L]).
示例运行
Welcome to SWI-Prolog (threaded, 64 bits, version 8.3.28-20-g6f8a68f2b)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.
For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).
?- working_directory(_,'C:/Users/Groot').
true.
?- [examples].
true.
?- set_prolog_flag(color_term,false).
true.
?- leash(-all), visible(+all).
true.
?- protocol("./trace_output.txt").
true.
?- trace.
true.
[trace] ?- example(1).
Call: (10) examples:example(1)
Unify: (10) examples:example(1)
Call: (11) examples:r([1, 2, 6], [], _32640)
Unify: (11) examples:r([1, 2, 6], [], _32640)
Call: (12) examples:r([2, 6], [1], _32640)
Unify: (12) examples:r([2, 6], [1], _32640)
Call: (13) examples:r([6], [2, 1], _32640)
Unify: (13) examples:r([6], [2, 1], _32640)
Call: (14) examples:r([], [6, 2, 1], _32640)
Unify: (14) examples:r([], [6, 2, 1], [6, 2, 1])
Exit: (14) examples:r([], [6, 2, 1], [6, 2, 1])
Exit: (13) examples:r([6], [2, 1], [6, 2, 1])
Exit: (12) examples:r([2, 6], [1], [6, 2, 1])
Exit: (11) examples:r([1, 2, 6], [], [6, 2, 1])
^ Call: (11) format('~w~n', [[6, 2, 1]])
[6,2,1]
^ Exit: (11) format('~w~n', [[6, 2, 1]])
Exit: (10) examples:example(1)
true.
[trace] ?- nodebug.
true.
?- noprotocol.
true.
文件:trace_output.txt
true.
?- trace.
true.
[trace] ?- example(1).
Call: (10) examples:example(1)
Unify: (10) examples:example(1)
Call: (11) examples:r([1, 2, 6], [], _32640)
Unify: (11) examples:r([1, 2, 6], [], _32640)
Call: (12) examples:r([2, 6], [1], _32640)
Unify: (12) examples:r([2, 6], [1], _32640)
Call: (13) examples:r([6], [2, 1], _32640)
Unify: (13) examples:r([6], [2, 1], _32640)
Call: (14) examples:r([], [6, 2, 1], _32640)
Unify: (14) examples:r([], [6, 2, 1], [6, 2, 1])
Exit: (14) examples:r([], [6, 2, 1], [6, 2, 1])
Exit: (13) examples:r([6], [2, 1], [6, 2, 1])
Exit: (12) examples:r([2, 6], [1], [6, 2, 1])
Exit: (11) examples:r([1, 2, 6], [], [6, 2, 1])
^ Call: (11) format('~w~n', [[6, 2, 1]])
[6,2,1]
^ Exit: (11) format('~w~n', [[6, 2, 1]])
Exit: (10) examples:example(1)
true.
[trace] ?- nodebug.
true.
?- noprotocol.