是否有辦法隱藏跟蹤中的單個謂詞?在這樣的規則:從跟蹤中隱藏謂詞
p(<Stuff>) :-
q(),
p(<ModifiedStuff>);
s(),
p(<ModifiedStuff>);
p(<ModifiedStuff>).
我就例如像躲從跟蹤q()
和s()
,因爲我只是感興趣的調用p()
。 q()
和s()
可能會調用很多其他謂詞,這些謂詞完全阻塞了跟蹤,並且很難在其中找到相關調用。
編輯1
現在我試圖在命令行而不是解釋內部執行和管道跟蹤到grep的grepping含p
線......但令我失望的我只好從運行時實現在命令行中,它仍然會打開一個prolog shell,所以管道輸出根本不起作用。實際上只有print
纔會發送到運行prolog進程的shell。
編輯2(輸出使用跟蹤時,(對,所有))
?- trace(shift_reduce, all).
% shift_reduce/2: [call,redo,exit,fail]
true.
[debug] ?- shift_reduce([λ,x,x], T).
T Call: (8) shift_reduce([λ, x, x], _7344)
T Exit: (8) shift_reduce([λ, x, x], [e, [λ], [v, [x]], [e, [v, [...]]]])
T = [e, [λ], [v, [x]], [e, [v, [x]]]] ;
T Exit: (8) shift_reduce([λ, x, x], [e, [λ], [v, [x]], [e, [v, [...]]]])
T = [e, [λ], [v, [x]], [e, [v, [x]]]] ;
T Fail: (8) shift_reduce([λ, x, x], _7344)
false.
[debug] ?-
如果你想從命令行運行並輸出到文件,你嘗試過使用'tee'嗎? (當然,假設你使用的是Linux,但你沒有說過......我認爲Windows有一個等效的命令) – lurker
你可以使用[trace/2](http://www.swi-prolog .org/pldoc/man?predicate = trace/2)僅爲您的謂詞跟蹤intresting。像「追蹤(q,+ call)」,「跟蹤(p,+ call)」。 –
您也可以使用間諜點而不是跟蹤進行調試。 –