;;; Exercice 1: à tester sur machine ;;; Exercice 2: ;; 1. 3 paires ;; 2. 6 paires ;;; Exercice 3: ;; 1. à tester sur machine ;; 2. à tester sur machine ;; 3. (mystere2 '(1 2 3 4 5) #'evenp) => (4 2) ;; 4. mystere2 prend a deux paramètres l une liste et f un prédicat ;; elle retourne une liste contenant les éléments de l qui vérifient ;; f dans l'ordre inverse l ;; 5. mystere1 et mystere2 sont équivalentes ;; 6. mystere1 est quadratique du fait de la construction de la ;; liste par la fin grâce au append qui entraîne la recopie de la liste ;; déjà construite à chaque fois qu'on rajoute un élément. ;; ;; mystere2 est linéaire; la liste est construite à l'envers par ajout ;; des éléments en tête puis retournée à la fin. ;; 7. (defun mystere (l f) (labels ((aux (l nl) (if (endp l) nl (aux (cdr l) (if (funcall f (car l)) (cons (car l) nl) nl))))) (aux l '()))) ;;; Exercice 4 ;; 1. (defun list-to-2set (l) (if (endp l) '() (let ((x (car l)) (ll (list-to-2set (cdr l)))) (if (< (count x ll) 2) (cons x ll) ll)))) ;; 2. (defun list-to-2set (l &key (test #'eql)) (if (endp l) '() (let ((x (car l)) (ll (list-to-2set (cdr l) :test test))) (if (< (count x ll :test test) 2) (cons x ll) ll))))