


tete([T|Q],T).



queue([T|Q],Q).



element1(A,[A|L]).
element1(A,[B|L]):- element1(A,L).

element2(E,L):- conc(L1,[E|L2],L).



hors_de(X,L):-
	nonvar(X),
	hors(X,L).
hors(X,[]).
hors(X,[Y|L]):-
	X \== Y,               /* ne marche que si X est connu: c'est pour  */
	hors_de(X,L).          /* cela que ce predicat n'est pas inversible */



conc([],L,L).
conc([T|L1],L2,[T|L3]):- conc(L1,L2,L3).





appartient(Sous_liste,Sur_liste):-
	conc(L2,L3,Sur_liste),
	conc(L1,Sous_liste,L2).


retrait1(E,Ldepart,Lresultat):-
	conc(L1,[E|L2],Ldepart),
	conc(L1,L2,Lresultat).


retrait2(J,[J|L],L).
retrait2(J,[K|L],[K|M]):- retrait2(J,L,M).


permuter([],[]).
permuter(L,[T|Q]):-
	retrait2(T,L,L2),
	permuter(L2,Q).


reverse_1([],[]).
reverse_1([A|L],Z):-
	reverse_1(L,L1),
	conc(L1,[A],Z).


reverse_2(L1,L2):- reverse_2(L1,[],L2).

reverse_2([],L,L).
reverse_2([T|Q],L_aux,L):-
	reverse_2(Q,[T|L_aux],L).



