トレースから個々の述語を隠す方法はありますか?このようなルールでは:トレースから述語を隠す
p(<Stuff>) :-
q(),
p(<ModifiedStuff>);
s(),
p(<ModifiedStuff>);
p(<ModifiedStuff>).
私は例えば、私が唯一p()
への呼び出しに興味を持っていますので、トレースからq()
とs()
を非表示にしたいと思います。 q()
とs()
は多くの他の述語を呼び出す可能性があり、トレースを完全に詰まらせ、関連する呼び出しを見つけることが困難になります。私は今、コマンドラインからではなく、インタプリタ内部から実行するとp
を含む行をgrepをするためにはgrepにトレースをパイプ試してみました...しかし、私の失望に、私はから実行するときに実現しなければならなかった
編集1
コマンドラインではまだプロローグシェルを開きますので、出力をパイプ処理することはまったく機能しません。 print
のみが実際にプロローグプロセスを実行するシェルに送信されます。
編集2(出力トレース(P、すべて)を使用して)あなたのようなtrace/2
を使用することができますSWI-Prologで
?- 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をトレースします。 'trace(q、+ call).'、' trace(p、+ call) 'のようなものです。 –
トレースの代わりにスパイポイントを使用してデバッグすることもできます。 –