prolog - 从跟踪中隐藏模块/包

标签 prolog trace swi-prolog

如何从跟踪中隐藏模块或整个包。
我有这个查询,我想逐步完成它,但是
我对 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/

相关文章:

prolog - 在序言中多次避免相同的答案

android - 如何从android中的代码读取/data/anr/traces.txt?

javascript - 如何调试JAVASCRIPT事件?或者如何让所有函数调用跟踪?

macos - 如何在 mac 上的 swi-prolog 中设置默认文件夹

prolog - 寻找子序列对

prolog - swi-prolog 中的不相等操作

prolog - Prolog 列表中的两颗星

assembly - ARM反汇编程序输出: When there are two arguments instead of three

java - 如何在 Windows 上使用 JPL(双向 Java/Prolog 接口(interface))?

带有 SWI-Prolog 的 Python 接口(interface)