Ejetcicios

Páginas: 11 (2639 palabras) Publicado: 11 de febrero de 2013
1) Instrucción: Trabajando en equipo, analice los siguientes códigos, dando
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.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS