0. Finir le TD numéro 2. Pour chaque exercice, imprimer votre code pour correction. Pour ceux qui arrivent à finir le TD 2 : 1. Écrire une macro `sql' permettant des expressions comme celle-ci : (sql (:select taille poids (age) :from *personnes* :where (< 10 age 20))) Ici, on suppose que `*personnes*' est une expression Common Lisp arbitraire dont la valeur est une liste d'instances d'une certaine classe et que `taille', `poids' et `age' sont des noms de créneaux de cette classe. Entre :select et :from doit figurer les nom des créneaux mentionnés dans la clause :where (afin de les distinguer des variables Common Lisp normales). Le résultat de la requête doit être une liste d'éléments correspondant aux instances pour lesquelles l'expression dans la clause :where est vrai. Chaque élément de la liste est représenté sous la forme d'une liste des valeurs des créneaux mentionnés sans être entourés de parenthèses entre :select et :from. Par exemple : CL-USER> (defclass personne () ((age :initarg :age) (poids :initarg :poids) (taille :initarg :taille))) # CL-USER> (defvar *personnes* (loop for (age poids taille) in '((44 85 188) (18 76 165) (15 66 170)) collect (make-instance 'person :age age :poids poids :taille taille))) CL-USER> (sql (:select taille poids (age) :from *personnes* :where (< 10 age 20))) ((165 76) (170 66))