我需要为我的一个项目提供swipl控制台输出(跟踪输出)。我试图使用JPL7 API来做到这一点,但我似乎找不到从swipl控制台获取输出的方法。有没有办法可以做到这一点?或者是否有我可以运行的查询将跟踪输出定向到文件,然后从那里开始工作?
提前致谢。
答案 0 :(得分:2)
您可以尝试使用protocol / 1,然后开始以leash(-all),trace
为前缀的查询
编辑一个解决方案(?)来改变回溯文件:我会保存在一个模块中(可能名为trace_protocol :-)然后将与?- [trace_protocol].
一起使用,随后{{1 }}
?- trace,trace_protocol(append(X,Y,[1,2,3])).
代码花了很多时间,因为似乎nb_current / 2中存在一个错误。不应该,但它会引发异常 - 实际上异常是从库(clpfd)抛出的,即使它没有直接包含在我的测试模块中。
顺序编号的* .tty文件最好显示在终端中,例如
:- meta_predicate trace_protocol(0).
trace_protocol :-
Name = trace_protocol_index,
catch(nb_getval(Name, N), _Exc, nb_setval(Name, 0)),
% writeln(ex:Exc),
nb_current(Name, N),
% writeln(nb_current(Name, N)),
M is N+1, nb_setval(Name, M),
% writeln(nb_setval(Name, M)),
format(atom(PN), '~s_~d.tty', [Name, N]),
% writeln(trace_protocol:PN),
protocol(PN).
trace_protocol(Q) :- trace_protocol, forall(Q, trace_protocol).
因为有TTY格式转义序列。也许可以使用$ cat *.tty