如何从跟踪中隐藏模块或整个包。
我有这个查询,我想逐步完成它,但是
我对 CLP(X) 的作用不感兴趣,只是在我的查询中出现什么问题。
?- X in 0..5, X in 7..8.
fail.
?- dif(A, 1), A = 1.
fail.
如果我在 SWI-Prolog 中运行这个查询,它会向我展示每一个漂亮的
模块 CLP(X) 的细节,不仅仅是一些内联
与约束有关,但也与 CLP(X) 中的所有其他内容有关:
Welcome to SWI-Prolog (threaded, 64 bits, version 8.1.2)
?- trace.
true.
[trace] ?- X in 0..5, X in 7..8.
Call: (9) clpfd:clpfd_in(_2662, 0..5) ? creep
Call: (10) clpfd:fd_variable(_2662) ? creep
Call: (11) var(_2662) ? creep
Exit: (11) var(_2662) ? creep
Call: (11) true ? creep
Exit: (11) true ? creep
[trace] ?- dif(A, 1), A=1.
Call: (9) dif:dif(_3044, 1) ? creep
Exit: (9) dif:dif(_3410{dif = ...}, 1) ? creep
Call: (9) _3410{dif = ...}=1 ? creep
有没有办法抑制 CLP(X) 的内部结构。为了
例如,如果我使用另一个 Prolog 系统,我看不到任何
CLP(X) 的内部结构(预览版):
Jekejeke Prolog 3, Development Environment 1.3.6
?- trace.
Yes
?- X in 0..5, X in 7..8.
0 Call X in 0..5 ?
0 Exit X in 0..5 ?
0 Call X in 7..8 ?
0 Fail X in 7..8 ?
No
?- neq(A, 1), A = 1.
0 Call neq(A, 1) ?
0 Exit neq(A, 1) ?
0 Call A = 1 ?
0 Fail A = 1 ?
No
有没有一种优雅的方法来禁用模块/包,但仍然可以看到模块/包的顶级调用/退出?
最佳答案
在 SWI-Prolog 中有多种方式来控制调试过程,见 http://www.swi-prolog.org/pldoc/man?section=debugging .在此可以使用 skip
选项,它将“跳到此调用的退出端口或唤醒端口”。该选项通过在跟踪期间按 s 而不是 Enter 来激活。
在这种情况下,跳过所有调用会导致跟踪与您的 Jekejeke 示例非常相似(尽管格式不太好):
?- use_module(library(clpfd)).
true.
?- trace.
true.
[trace] ?- X in 0..5, X in 7..8.
Call: (9) clpfd:clpfd_in(_7788, 0..5) ? skip
Exit: (9) clpfd:clpfd_in(_8226{clpfd = ...}, 0..5) ? creep
Call: (9) integer(_8226{clpfd = ...}) ? skip
Fail: (9) integer(_8226{clpfd = ...}) ? creep
Call: (9) clpfd:clpfd_in(_8226{clpfd = ...}, 7..8) ? skip
Fail: (9) clpfd:clpfd_in(_8226{clpfd = ...}, 7..8) ? creep
false.
关于prolog - 从跟踪中隐藏模块/包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110407/