/* Manipulations de listes */
element1(E, [E|S]) .
element1(E, [X|S]) :- element1(E, S).

enlever1(E, [E|S], S).
enlever1(E, [X|S], [X|T]) :- enlever1(E, S, T).

permut([], []).
permut([A|S], P) :- permut(S, R), enlever1(A, P, R).

concat([], L, L).
concat([A|S], L, [A|R]) :- concat(S, L, R).

renverser([], []).
renverser([A|S], R) :- renverser(S,T), concat(T, [A], R).

element2(E, L) :- concat(_, [E|_], L).
enlever2(E, L, R) :- concat(D, [E|F], L), concat(D, F, R).

long([], 0).
long([A | S], N) :- long(S, P), N is P+1.


/* avec coupe-choix */

enleverp(E, [E|S], S) :- !.
enleverp(E, [X|S], [X|T]) :- enleverp(E, S, T).

enlevertout(E, L, R) :- enlever1(E, L, T), !, enlevertout(E, T, R).
enlevertout(E, L, L).
