%%% %%% Les utilitaires d'écriture %%% fichier "sortie.pro" %%% %% écriture d'une liste de mots séparés par un blanc %% et terminée par une fin de ligne ecrire_les_mots([H|T]):-write(H),write(' '),ecrire_les_mots(T). ecrire_les_mots([]) :- nl. %%% %%% impression d'expressions Prolog avec contr^ole %%% des foncteurs qui sont éclatés sur plusieurs lignes %%% appel: pp(expression) %%% ou pp(expression,décalage) %%% pp(X):-pp(X,0). % appel simplifié pp(X,_):-var(X),!,write('_'). % une variable ? pp(X,I):- X=.. [Y,Y1|Ys],boum(Y,Long),!, % predicat a éclater? write(Y),write('('), % ecrire le foncteur pp(Y1,I+Long), % son premier argument pp1(Ys,I+Long),write(')'). % et les autres pp(X,_):-write(X). % autre cas %%% %%% impression d'une liste de paramètres %%% sur des lignes différentes %%% en tenant compte du décalage %%% pp1([],_):-!. pp1([X],I):-!,write(','),nl,tab(I),pp(X,I). pp1([X|Xs],I):-!,write(','),nl,tab(I),pp(X,I),pp1(Xs,I). %%% %%% les prédicats à éclater avec le décalage %%% des lignes suivantes normalement c'est 1 de plus %%% que la longueur de l'identificateur %%% boum(ph,3):-!. boum(snm,4):-!. boum(svb,4):-!. boum(rel,4):-!. boum(int,4):-!. %% le calculer si necessaire boum(X,L):- name(X,S),length(S,L0),L is L0+1.