/* Praedikat  blaetter(+Term,-Atomliste): 
   Sammle die Blaetter eines Terms als Liste 
*/

/* Da die Blatter der linken Teilterme zuerst auf den Akkumulator
   kommen, muessen wir zum Schluss die Akkumulatorliste umkehren: */

blaetter(Term, BlattListe) :- 
	blaetter(Term,[],Liste),
	reverse(Liste,BlattListe).

/* Falls der Term ein Blatt ist, kommt er auf den Akkumulator: */

blaetter(T,Acc,L) :-
	T =.. [F],   
	!,
	L = [F|Acc].
/* Falls der Term mindestens einen Teilterm Arg hat, kommen die
   Blaetter der Teilterme auf den Akkumulator: */

blaetter(T,Acc,L) :-
	T =.. [F,Arg|Args],
	blattfolge([Arg|Args],Acc,L).

/* Von den Blaettern einer Folge von Termen kommen zuerst die 
   des ersten Terms auf den Akkumulator, dann die des zweiten usw.: */

blattfolge([Arg|Args],Acc,L) :-
	blaetter(Arg,Acc,ArgAcc),
	blattfolge(Args,ArgAcc,L).
blattfolge([],Acc,Acc).


