gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:41:25 25 4
gpt4 key购买 nike

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

提前致谢。

最佳答案

你可以尝试使用protocol/1,然后开始以 leash(-all),trace

为前缀的查询

编辑一个解决方案(?)以在回溯时更改文件:我将保存在一个模块中(可能命名为 trace_protocol :-),然后将与 ?- [trace_protocol] 一起使用。 和随后的 ?- trace,trace_protocol(append(X,Y,[1,2,3])).

:- 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).

编写代码花费了很多时间,因为 nb_current/2 中似乎存在错误。不应该,但它抛出一个异常 - 实际上异常是从库(clpfd)抛出的,即使它没有直接包含在我的测试模块中。

顺序编号的 *.tty 文件最好在终端中显示,例如

$ cat *.tty

因为有 TTY 格式化转义序列。也许这样的序列可以用 ?- set_prolog_flag(color_term, false) 来拒绝。

关于prolog - 如何使用 JPL 获取 swi-prolog 控制台输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36995524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com