% member(E,L) ist erfuellt, wenn das Element E in der List L vorkommt

% member(E,L) ist erfuellt, falls E das erste Element von L ist
member(E,[E|_]).
member(E,[_|R]) :- member(E,R). % oder falls E in der Restliste von L vorkommt

% Sortieren einer Liste von Zahlen
sort(L,S) :- perm(L,S), sorted(S).

% Korrekte Loesungen: Ist eine Liste von Zahlen aufsteigend sortiert
sorted([]).
sorted([_]).
sorted([E1,E2|L]) :- E1 =< E2, sorted([E2|L]).

% Moegliche Loesungen: Permutation einer Liste
perm([],[]).
perm(L,[E|R]) :- remove(E,L,LwithoutE), perm(LwithoutE,R).

remove(E,[E|R],R).
remove(E,[F|R],[F|RwithoutE]) :- remove(E,R,RwithoutE).

% Konkatenation zweiter Listen
append([],    L, L).
append([E|R], L, [E|M]) :- append(R,L,M).

add_list(L,E,LundE) :- append(L,[E],LundE).

% Erfuellt wenn E das letzte Element der Liste L ist
last(E,L) :- append(_,[E],L).

% Ist E ein Element der Liste L
member(E,L) :- append(_,[E|_],L).

% Streiche ein Element in einer Liste
delete(L,E,LohneE) :- append(L1,[E|L2],L), append(L1,L2,LohneE).

% Ist T eine Teilliste von L?
sublist(T,L) :- append(Xs,_,L), append(_,T,Xs).






