;;; Exercice 1 ;; à tester soi-même ;;; Exercice 2 ;;; 1. ;; Solution récursive naïve (defun at-least-one (l preds) (if (endp l) l (let ((rec (at-least-one (cdr l) preds)) (r (some (lambda (pred) (funcall pred (car l))) preds))) (if r (cons (car l) rec) rec)))) ;; Solution Lisp (defun at-least-one (l preds) (remove-if-not (lambda (x) (some (lambda (pred) (funcall pred x)) preds)) l)) ;; Remarque: On peut réécrire "some" si on ne la connaît pas ;; (defun my-some (pred l) ;; (if (endp l) ;; nil ;; (or (funcall pred (car l)) (my-some pred (cdr l))))) ;;; 2. ;; (defun at-least-one (l &rest preds) ;; le reste est identique ;;; Exercice 3 ;;; 3.1 (defun nb-cons (e) (if (atom e) 0 (+ 1 (nb-cons (car e)) (nb-cons (cdr e))))) ;;; 3.2 La fonction n'est pas récursive terminale ;;; Exercice 4 ;; à tester soi-même