2 votes

Comment obtenir la sortie de la console swi-prolog en utilisant JPL ?

J'ai besoin de la sortie de la console swipl (la sortie de la trace) pour l'un de mes projets. J'essaie d'utiliser l'API JPL7 pour ce faire, mais je n'arrive pas à trouver une méthode pour récupérer la sortie de la console swipl. Est-ce qu'il y a un moyen de le faire ? Ou bien y a-t-il une requête que je puisse exécuter pour diriger la sortie de la trace vers un fichier et ensuite travailler à partir de là ?

Merci d'avance.

2voto

CapelliC Points 30055

Vous pouvez essayer d'utiliser protocole /1, puis commencez votre requête avec le préfixe leash(-all),trace

éditer une solution ( ?) pour changer de fichier sur le backtracking : Je sauvegarderais dans un module (peut-être nommé trace_protocol :-) et ensuite je l'utiliserais avec ?- [trace_protocol]. et par la suite ?- 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).

Cela a pris beaucoup de temps à coder, car il semble qu'il y ait un bug dans nb_current/2. Cela ne devrait pas être le cas, mais une exception est levée - en fait, l'exception est levée à partir de library(clpfd), même si elle n'est pas directement incluse dans mon module de test.

Les fichiers *.tty numérotés séquentiellement s'affichent mieux dans le terminal, par exemple

$ cat *.tty

puisqu'il existe des séquences d'échappement pour le formatage TTY. Ces séquences pourraient peut-être être désactivées à l'aide de ?- set_prolog_flag(color_term, false).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X