Ejetcicios
Páginas: 11 (2639 palabras)
Publicado: 11 de febrero de 2013
una descripción de lo que realiza cada parte, y completando los códigos
que se le solicite.
;;;------------------------------------------------------------------------
;;; PARTE I: EJERCICIOS B\'ASICOS DE LISTAS
;;;------------------------------------------------------------------------
;;; En esta primera partese ver\'an algunos ejercicios en los que se definen
;;; funciones muy sencillas mediante recursi\'on sobre listas. Algunas de
;;; estas funciones tienen su versi\'on predefinida en Lisp.
;;; Como se observar\'a, el "patr\'on" que siguen todas estas funciones es muy
;;; parecido:
;;;
;;; (defun f
;;; (... l ...)
;;; (if (endp l)
;;;
;;; ))
;;;
;;;Es decir, usualmente el caso base se cumple cuando la lista es vac\'ia, y
;;; en el caso recursivo se trata de operar de alguna manera sobre el
;;; primero de la lista y sobre la llamada recursiva que se obtiene
;;; aplicando la propia funci\'on que se define sobre el resto de la
;;; lista. Usaremos indistintamente CAR o FIRST, y del mismo modo usaremos
;;; indistintamente CDR o REST.;;;************************************************************************
;;; 1) Definir la funci\'on (longitud lst) que devuelva la longitud de la
;;; lista lst. Por ejemplo:
;;;
;;; > (longitud '(a b c d))
;;; 4
;;;************************************************************************
;;; Una soluci\'on:
(defun longitud (lst)
(if (null lst)
0
(+ 1 (longitud (cdrlst)))))
;;;************************************************************************
;;; 2) Escribir la funci\'on (cuadrados lst) que devuelva la lista de
;;; cuadrados de la lista num\'erica lst. Por ejemplo:
;;;
;;; > (cuadrados '(1 2 3 4))
;;; (1 4 9 16)
;;;************************************************************************
;;; Una soluci\'on:
(defun cuadrados (lst)(if (endp lst)
nil
(cons (* (car lst) (car lst)) (cuadrados (cdr lst)))))
;;; Nota: Es posible definir esta funci\'on de manera mucho m\'as compacta
;;; usando LAMBDA y MAPCAR:
(defun cuadrados (lst)
(mapcar #'(lambda (x) (* x x)) lst))
;;; Es lo que se llama "programaci\'on de segundo orden", ya que MAPCAR es
;;; una funci\'on que tiene como uno de sus argumentos deentrada una
;;; funci\'on. En general, casi todos los ejercicios de esta parte se podr\'ian
;;; hacer usando programaci\'on de segundo orden. M\'as adelante se realizar\'an
;;; ejercicios de ese tipo.
;;;************************************************************************
;;; 3) Escribir el predicado (suma-lista lst) que devuelva la suma de los
;;; elementos de la lista num\'ericalst. Por ejemplo:
;;;
;;; > (suma-lista '(1 2 3 4))
;;; 10
;;;************************************************************************
;;; Una soluci\'on:
(defun suma-lista (lst)
(if (endp lst)
0
(+ (first lst) (suma-lista (rest lst)))))
;;;************************************************************************
;;; 4) Definir la funci\'on (ultimo lst) quedevuelva el \'ultimo elemento de
;;; la lista lst. Supondremos que la lista de entrada nunca ser\'a vac\'ia.
;;;
;;; Ejemplo de uso:
;;; > (ultimo '(1 2 3 4))
;;; 4
;;;************************************************************************
;;; Una soluci\'on:
(defun ultimo (lst)
(if (endp (cdr lst))
(car lst)
(ultimo (cdr lst))))
;;; N\'otese que aqu\'i el caso base esdistinto: listas unitarias.
;;; Nota: existe una funci\'on predefinida LAST que devuelve el \'ultimo cons
;;; de una lista. ¡OJO!, no el \'ultimo elemento. Con LAST, la funci\'on
;;; quedar\'ia as\'i:
(defun ultimo (lst)
(first (last lst)))
;;;************************************************************************
;;; 5) Definir la funci\'on (pertenece e c) que se verifique...
Leer documento completo
Regístrate para leer el documento completo.