%           ------------------------------------------------------
%                     Kompaktieren von Prolog-Programmen
%
%            Dieses Programm entfernt alle Kommentare aus einer
%            Prolog-Quelldatei und gibt je eine ganze Klausel pro
%            Zeile aus.
%            (c) 1987 JJK
%           ------------------------------------------------------

compact(Infile, Outfile) :-
      disk_dir(CDir), open(Infile), disk_dir(CDir), tell(Outfile),
      compact, seen, told, see(user), tell(user).

compact :- side_effects((read(Clause), try(put(Clause)))), compact.
compact.

% - - - eine Klausel ausgeben

put('e r r') :- !.   % Variablen sind auch fehlerhaft
put(( Head :- Body )) :-
      !, writeq(( Head :- Body )), fullstop.
put(( Left --> Right )) :-
      !, tag(transl_rule(Left, Right, Clause)),
      writeq(Clause), fullstop.
put(( :- Goal )) :-
      !, writeq(( :- Goal )), fullstop, once(Goal).   % Fehlschlag macht nichts
put(Unitclause) :- writeq(Unitclause), fullstop.

% - - - Punkt und neue Zeile ausgeben
fullstop :- wch(.), nl.

