/* Exercice 2 : listes */

concat([], L2, L) :- L = L2, !.
concat([X|S1], L2, L) :- L = [X|S], concat(S1, L2, S).
    
renverse([], []) :- !.
renverse([X|S1], L2) :- 
    length(S1,N),
    length(S,N),
    concat(S, [X], L2), 
    renverse(S,S1).
    
palindrome(L) :- renverse(L,L).
    
    
/* Exercice 3 : Modélisation */

est_cercle(cercle).

est_polygone(polygone).
est_polygone(X) :- est_triangle(X); est_quadrilatere(X).

est_triangle(triangle).

est_quadrilatere(quadrilatere).
est_quadrilatere(X) :- est_trapeze(X).

est_trapeze(trapeze).
est_trapeze(X) :- est_parallelogramme(X).

est_parallelogramme(parallelogramme).
est_parallelogramme(X) :- est_rectangle(X) ; est_losange(X).

est_rectangle(carre).
est_rectangle(rectangle).

est_losange(carre).
est_losange(losange).


