(defun alumnos-nombres (lista) (mapcar #`car lista)) Recorre la lista

Anuncio
Práctica 1: Programación en LISP
Inteligencia Artificial
(defun alumnos-nombres (lista)
(mapcar #'car lista))
Recorre la lista y muestra el primer elemento de las ternas (NOMBRE)
2. Escribe una función que tome como argumento una lista de alumnos y devuelva una
lista con los valores de sus notas medias
(defun alumnos-notasmedias (lista)
(mapcar #'caddr lista))
Recorre la lista y muestra el último elemento de las ternas (NOTA-MEDIA)
3. Con el fin de dar prioridades a la hora de dar prácticas en empresa, se necesita poder
ordenar a los alumnos según su nota media de expediente. Escribe una función no
destructiva que tome como argumento una lista de alumnos y la devuelva con los
elementos ordenados en orden creciente según su nota media.
(defun alumnos-ordena (lista)
(let ((aux (copy-tree lista)))
(sort aux #'< :key #'caddr)))
Primeramente realiza una copia de la lista y a continuación aplica la función destructiva de
ordenación 'sort' para ordenar de menor a mayor la lista por el último elemento de las ternas
(NOTA-MEDIA)
4. Escribe una función que tome como argumento una lista de alumnos y devuelva una
lista compuesta a su vez de dos listas: la primera con los nombres y la segunda con las
notas medias. En las lista los elementos deben aparecer ordenados de menor a mayor,
según su nota media.
(defun alumnos-transforma (lista)
(let ((aux (alumnos-ordena lista)))
(list (alumnos-nombres aux) (alumnos-notasmedias aux))))
Almacena en una variable local la lista ordenada según 'alumnos-ordena' y a continuación crea
una lista con los pares ('alumnos-nombres' , 'alumnos-notasmedias') a partir de esa variable
5. Escribe una función que tome como argumento un valor max y una lista de alumnos y
devuelva una sublista compuesta por los alumnos cuya nota media sea igual o menor
que max, ordenados de menor a mayor por su nota media
(defun alumnos-hasta-maximo (max lista)
(remove-if #'(lambda (x) (if (> (caddr x) max) t)) (alumnos-ordena
lista)))
Elimina de manera no destructiva los elementos cuya última coordenada en la terna sea mayor
que 'max'
16
Descargar