Para la función de intersección hemos utilizado un mapcar que nos recorra una de las listas de entrada, y por cada elemento en la lista, ejecutamos otro mapcar que nos compare con cada elemento de la segunda lista. En caso de que el elemento se encuentre entre ambas listas, calculamos la nota media y lo insertamos en la lista final. Para la función de unión primero generamos la lista intersección, y luego con cada una de las listas de entrada vamos viendo si sus elementos se encuentran en la intersección. En caso de no encontrarlos, los insertamos en la lista de intersección, obteniendo asi la lista final. (defun alumnos-interseccion(cjto-a cjto-b) (setf inter nil) (mapcar #' (lambda (x) (mapcar #' (lambda (y) (cond ((= (second x) (second y)) (setf inter (cons x inter)) (setf (third (car inter)) (/ (+ (third x) (third y)) 2))) (t 0))) b))cjto-a)) cjto- (defun alumnos-union (cjto-a cjto-b) (alumnos-interseccion cjto-a cjto-b) (setf unir (copy-tree inter)) (mapcar #' (lambda (x) (setf flag 0) (mapcar #' (lambda (y) (cond ((= (second x) (second y)) (setf flag 1)) (t 0))) inter) (cond ((= flag 0) (setf unir (cons x unir))) (t 0)))cjto-a) (mapcar #' (lambda (x) (setf flag 0) (mapcar #' (lambda (y) (cond ((= (second x) (second y)) (setf flag 1)) (t 0))) inter) (cond ((= flag 0) (setf unir (cons x unir))) (t 0)))cjto-b)) Ejercicio 8 Dada una lista de alumnos y un número de expediente se nos pide clasificar el alumno al que corresponda dicho número de expediente según su nota media comno matricula de honor, sobresaliente, notable, suficiente o insuficiente. Recorremos la lista de entrada hasta encontrar el alumno cuyo número de expediente nos han dado. Luego con la ayuda de la función cond le asignamos la nota verbal que le corresponda, y utilizando la funciones list y setf de forma combinada obtenemos el formato pedido. (defun alumnos-clasifica-nota (expediente lista) (setf listafinal expediente) (mapcar #'(lambda (x) (if (= (second x) expediente) (cond ((< (third x) 5) (setf listafinal 'INSUFICIENTE listafinal))) ((and (>= (third x) 5) (< (third x) 7)) listafinal (list 'SUFICIENTE listafinal))) ((and (>= (third x) 7) (< (third x) 9)) listafinal (list 'NOTABLE listafinal))) (list (setf (setf