2016-05-03 14 views
2

私のプロジェクトの1つにswiplコンソール出力(トレース出力)が必要です。私はこれを行うにはJPL7 APIを使用しようとしているが、私はswiplコンソールから出力を取得する方法を見つけることができないようだ。私はこれを行う方法がありますか?または、トレース出力をファイルに転送してそこから作業するクエリを実行できますか?JPLを使用してswi-prologコンソール出力を取得する方法は?

ありがとうございます。 (?)

答えて

2

あなたは、あなたのクエリはバックトラック上のファイルを変更するleash(-all),trace

編集ソリューションで始まる始め、protocol/1を使用しようとすることができます:私は多分trace_protocolという名前のモジュール(に保存します: - )その後、nb_current/2のバグがあるようですので、それは、コードに多くを取っ?- [trace_protocol].、その後?- trace,trace_protocol(append(X,Y,[1,2,3])).

:- meta_predicate trace_protocol(0). 

trace_protocol :- 
    Name = trace_protocol_index, 
    catch(nb_getval(Name, N), _Exc, nb_setval(Name, 0)), 
    % writeln(ex:Exc), 
    nb_current(Name, N), 
    % writeln(nb_current(Name, N)), 
    M is N+1, nb_setval(Name, M), 
    % writeln(nb_setval(Name, M)), 
    format(atom(PN), '~s_~d.tty', [Name, N]), 
    % writeln(trace_protocol:PN), 
    protocol(PN). 

trace_protocol(Q) :- trace_protocol, forall(Q, trace_protocol). 

で使用します。すべきではありませんが、例外がスローされます。実際には、テストモジュールに直接含まれていない場合でも、ライブラリ(clpfd)から例外がスローされます。 TTYの書式エスケープシーケンスがあるので

* .ttyファイルの番号順では、インスタンス

$ cat *.tty 

のために、ターミナルに示す最高です。おそらく、そのようなシーケンスは、下にすることができます?- set_prolog_flag(color_term, false).

+1

ありがとう!それはうまくいった!それ以外はコンソール出力をファイルに書き出すために最後に 'noprotocol'を追加しなければなりません。 – absolutelydevastated

+0

出力先のファイルを変更することはできますかコンソール出力を異なるソリューションごとに出力しますか? – absolutelydevastated

+0

いいえ、私はそれが簡単だとは思わない...あなたは、クエリプロセスを 'ドライブ'しようとするかもしれない/バックトラックでプロトコル/ 1、おそらくタイムスタンプを追加呼び出します。コードを表示させてください、しかし、あなたはテストする必要があります... – CapelliC