如何使用JPL获得swi-prolog控制台输出?

时间:2016-05-03 04:17:32

标签: prolog swi-prolog jpl

我需要为我的一个项目提供swipl控制台输出(跟踪输出)。我试图使用JPL7 API来做到这一点,但我似乎找不到从swipl控制台获取输出的方法。有没有办法可以做到这一点?或者是否有我可以运行的查询将跟踪输出定向​​到文件,然后从那里开始工作?

提前致谢。

1 个答案:

答案 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

拒绝此类序列