Скрыть модуль / пакет от трассировки - PullRequest
3 голосов
/ 12 марта 2019

Как скрыть модуль или весь пакет от трассировки.У меня есть этот запрос, и я хочу пройти через него, но меня не интересует, что делает 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) (Preview):

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

Есть ли элегантный способ отключить модуль / пакет, но тем не менее увидетьвызовы верхнего уровня / выходы из модуля / пакета?

1 Ответ

1 голос
/ 17 апреля 2019

Существуют различные способы управления процессом отладки в SWI-Prolog, см. http://www.swi -prolog.org / pldoc / man? Section = отладка .В этом случае вы можете использовать опцию 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.
...