

element1(E,[E|_]).
element1(E,[_|L]):- element1(E,L).

element2(E,L):- append(_,[E|_],L).


hors_de(X,L):-
	nonvar(X),
	hors(X,L).
hors(_,[]).
hors(X,[Y|L]):-
	X \= Y,              
	hors_de(X,L).          

appartient0([X|Sous_liste],[X|Sur_liste]):- 
  entete(Sous_liste,Sur_liste).
appartient0(Sous_liste,[_|Sur_liste]):- 
  appartient0(Sous_liste,Sur_liste).

entete([],_).
entete([X|Sous_liste],[X|Sur_liste]):-
	entete(Sous_liste,Sur_liste).

appartient1([X|Sous_liste],[X|Sur_liste]):- 
  append(Sous_liste,_,Sur_liste).
appartient1(Sous_liste,[_|Sur_liste]):- 
  appartient1(Sous_liste,Sur_liste).

appartient2ko(Sous_liste,Sur_liste):-
		append(_,Sous_liste,Li),
		append(Li,_,Sur_liste).

appartient2ok(Sous_liste,Sur_liste):-
	append(Li,_,Sur_liste),
	append(_,Sous_liste,Li).
    
retrait_elt1(E,Ldepart,Lresultat):-
	append(L1,[E|L2],Ldepart),
	append(L1,L2,Lresultat).

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

retrait_tt_occurs(_,[],[]).
retrait_tt_occurs(J,[J|L],LR):-
	 retrait_tt_occurs(J,L,LR).
retrait_tt_occurs(J,[K|L],[K|LR]):- 
	 K \= J,
	 retrait_tt_occurs(J,L,LR).


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


renverser_1([],[]).
renverser_1([A|L],Z):-
	renverser_1(L,L1),
	append(L1,[A],Z).


renverser_2(L1,L2):- renverser_3(L1,[],L2).

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


palindrome(L):- renverser_2(L,L).

