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).