:- module(addDepth,[]).

translate((L --> R),(Ltr --> Rtr)) :-
   !, translate1(L,Ltr,Tiefe),
   translate2(R,Rtr,Tiefenliste),
         % Tiefen der Konstituentenbaeume
   % Tiefe := 1 + Maximum Tiefeliste
   maximum(Tiefenliste,MaxTiefe),
   Tiefe is 1+MaxTiefe.
   
maximum([],0). % 1?
maximum([N|Ns],Max) :-
    maximum(Ns,NsMax),
    Max is max(N,NsMax).

translate(Term,Term). % nur Regeln ändern

% translate1(+Kategorie,-Term,?Baumtiefe)
translate1(Kategorie,Term,Baumtiefe) :-
    Kategorie =.. [Funktor|Argumente],
    append(Argumente,[Baumtiefe],MehrArgumente),
    Term =.. [Funktor|MehrArgumente].

/*


% translate2(+Rechts,-RechtsTr,-Baumliste)
translate2((A;B),(Atr;Btr),Baeume) :- % Baeume ist Var!
    !, translate2(A,Atr0,BaeumeA),
       translate2(B,Btr0,BaeumeB),
    Atr = (Atr0,{ Baeume=BaeumeA }),
    Btr = (Btr0,{ Baeume=BaeumeB }).
translate2((A,B),Tr,Baeume) :-
    !, translate2(A,Atr,BaeumeA),
       translate2(B,Btr,BaeumeB),
    (fixed_length(BaeumeA) % s.u.
    -> Tr = (Atr,Btr), % jetzt verketten:
        append(BaeumeA,BaeumeB,Baeume) 
    ;  Tr = (Atr,Btr,  % erst beim Parsen verketten:
               {append(BaeumeA,BaeumeB,Baeume)})
    ).
translate2([],[],[]) :- !.
translate2([Atom|As],[Atom|As],[[Atom]|Baeume]) :-
    !, translate2(As,As,Baeume).
translate2({Prolog},{Prolog},[]) :- !.
translate2(Cat,CatTr,[Baum]) :-
    !, translate1(Cat,CatTr,Baum).

fixed_length(L) :-
    var(L),!, fail. % L nicht belegen!
fixed_length([]).
fixed_length([_X|Xs]) :-
    fixed_length(Xs).

*/
