my_member(X, [X|_]).
my_member(X, [_|Tail]) :-
my_member(X, Tail).
not_member(_, []).
not_member(X, [Head|Tail]) :-
Tail == [],
Head \== X.
not_member(X, [Head|Tail]) :-
X \== Head,
not_member(X, Tail).
count([], 0).
count([_|Tail], Anzahl) :-
count(Tail, AnzahlNeu),
Anzahl is AnzahlNeu + 1.
remove(_, [], []).
remove(A, [A|T], L2) :-
remove(A, T, L2).
remove(A, [H|T], L2) :-
remove(A, T, L3),
L2 = [H|L3].
singular([], []).
singular([Head|Tail], ListeNeu) :-
singular(Tail, Liste),
not_member(Head, Liste),
ListeNeu = [Head|Liste].
singular([_|Tail], Liste) :-
singular(Tail, Liste).
concatenate([],L,L).
concatenate([H1|T1], L2, [H1|Liste]) :-
concatenate(T1, L2, Liste).
difference(L1,[],L1).
difference([],_,[]).
difference(L1,L2,L3) :-
L1=[H|T],
not_member(H,L2),
difference(T,L2,T1),
L3=[H|T1].
difference(L1,L2,T1) :-
L1=[H|T],
my_member(H,L2),
difference(T,L2,T1).