;;; Exercice 1 ;;; Exercice 2 (defparameter *arbre1* '(((nil 12 nil) 5 (nil 10 nil)) 2 ((nil 8 nil) 3 (nil 7 nil)))) (defparameter *arbre2* '((nil 5 (nil 10 nil)) 2 ((nil 8 nil) 3 (nil 1 nil)))) (defparameter *arbre3* '((nil 5 (nil 10 nil)) 3 ((nil 8 nil) 3 (nil 5 nil)))) (defun nouvel-arbre (gauche etiquette droit) (list gauche etiquette droit)) (defun arbre-vide () nil) (defun arbre-vide-p (arbre) (null arbre)) (defun sag (arbre) (first arbre)) (defun eti(arbre) (second arbre)) (defun sad (arbre) (third arbre)) (defun feuille-p (arbre) (and (arbre-vide-p (sag arbre)) (arbre-vide-p (sad arbre)))) ;;; Exercice 3 (defun eti-max-arbre (arbre) (if (arbre-vide-p arbre) 0 (max (eti-max-arbre (sag arbre)) (eti arbre) (eti-max-arbre (sad arbre))))) (defun map-arbre (f arbre) (if (arbre-vide-p arbre) arbre (nouvel-arbre (map-arbre f (sag arbre)) (funcall f (eti arbre)) (map-arbre f (sad arbre))))) (defun arbre-every (pred arbre) (or (arbre-vide-p arbre) (and (funcall pred (eti arbre)) (arbre-every pred (sag arbre)) (arbre-every pred (sad arbre))))) (defun etiquettes (arbre) (if (arbre-vide-p arbre) '() (remove-duplicates (append (etiquettes (sag arbre)) (list (eti arbre)) (etiquettes (sad arbre))) :test #'equal)))