% Fuer A --> B1,...,Bn eine Baumtiefenausgabe ergaenzen
% mit translate(+DCG-Regel,-DCG-Regel)

% Korrigiere: ersetze alle translate(A,ATr,Tiefe) durch
%                          translate(A,ATr,[Tiefe])

translate((L --> R),(LTr --> RTr,Bedingung)) :-
   !, translate(L,LTr,[TiefenVar]), % +L,-Ltr(TiefenVar),?[TiefenVar]
   translate(R,RTr,TiefenListe),
   Bedingung =
         { max_list(TiefenListe,MaxTiefe),
           TiefenVar is 1 + MaxTiefe }.
translate(X,X). % nur DCG-Regel aendern

% translate(+Rhs,RhsTr,Tiefenliste).

translate((B,Bs),(BTr,BsTr),[TB|TBs]) :-
    !, translate(B,BTr,[TB]),
    translate(Bs,BsTr,TBs).
translate([Atom|Atome],[Atom|Atome],[0]) :-
    !.
translate([],[],[0]) :-
    !.
translate(L,LTr,[Var]) :- 
    % L ist eine Kategorie: Zerlegen in Fun und Args und neues Argument Var dazutun
    L =.. [Fun|Args],
    append(Args,[Var],NewArgs),
    LTr =.. [Fun|NewArgs].
    
