Documentos de Académico
Documentos de Profesional
Documentos de Cultura
"EJERCICIOS")
(defun f.1.1 (a b c)
(lambda (x) (let ((x2 (expt x 2)))
(/ 1 (sqrt
(+ (* a x2)
(* b x2)
c))))))
(defun mediano (x y z)
(let* ((min (min x y z))
(max (max x y z))
(medp (lambda (x)
(and(not (= x min))
(not (= x max)) x))))
(or (funcall medp x) (funcall medp y) z)))
(defun mediano-2 (x y z)
(let* ((min&max (list (min x y z)
(max x y z)))
(medp (lambda (x) (and (not (member x min&max)) x))))
(or (funcall medp x) (funcall medp y) z)))
(defun ejercicio.1.6 (a b c d)
(and (or (< a c) (< b c ))
(or (> a d) (> b d))))
;;1.9 Definir una funcin que tenga por argumento una lista y devuelva
;;el tercer elemento de dicha lista.
;;1.10 Definir una funcin que tenga por argumento una lista y
;;devuelva otra lista con el primer y ltimo elemento de la lista.
;;1.15 Definir una funcin que tomando como argumentos una lista
;;y un elemento, devuelva T si el elemento aparece ms de una vez
;;en la lista.
;;1.19 Definir un predicado que tome tres argumentos: da, mes y ao,
;;y devuelva T si es una fecha vlida.
(defun fecha-validap (d m a)
(and (> m 0) (<= m 12)
(> d 0)
(let ((max (cond
((= m 2) 28)
((evenp m) 30)
(t 31))))
(<= d max))))
;;1.20 Definir una funcin que devuelva cierto (T) si alguno de sus
;;tres argumentos no es divisible por 2.
(defun minimo (x y z)
(or (and (< x y) (< x z) x)
(and (< y x) (< y z) y)
z))
(defun minimo (x y z)
(cond
((and (< x y) (< x z)) x)
((and (< y x) (< y z)) y)
(t z)))
(defun maximo (x y z)
(or (and (> x y) (> x z) x)
(and (> y x) (> y z) y)
z))
(defun maximo (x y z)
(cond
((and (> x y) (> x z)) x)
((and (> y x) (> y z)) y)
(t z)))
(defun and3 (x y z)
(when x (when y z)))
(defun or3 (x y z)
(if x t (if y t z)))
(defun suma (x y)
(do ((total x (1+ total))
(cont y (1- cont)))
((zerop cont) total)))
(defun exponent (x y)
(do ((total x (* total x))
(exp (1- y) (1- exp)))
((zerop exp) total)))
(defun agrupar (x y)
(typecase x
(null (list y))
(atom (and (listp y) (agrupar y x)))
(cons (let ((h (car x))
(tl (cdr x)))
(if (equal h y) (cons y x)
(cons h (agrupar tl y)))))
(otherwise nil)))
;;Ejemplo:
;;> (APLANAR ( (1 2 3) (9 (2 3 4) ) ( ( ( ( 3 4 ( 7 ) ) ) ) ) ) )
;;( 1 2 3 9 2 3 4 3 4 7 )
;;1.35 Definir una funcin que reciba como argumento una lista de
;;nmeros y devuelva otra lista cuyos elementos sean los cuadrados
;;de los anteriores.
(defun menor-es-par.2 (x y)
(evenp (min x y)))
;;1.41 Definir una funcin que aada un tomo a una lista que se le
;;pasan como argumentos a la funcin.
;;
;;Modificar la funcin anterior de forma que el tomo que se le
;;pasa como argumento sea opcional. En caso de que no se
;;especifique en la llamada el tomo, se aadir a la lista un tomo
;;cualquiera.
;;
;;Modificar la funcin anterior de forma que pueda aadirse un
;;nmero variable de tomos a la lista que se le pasa como
;;argumento.
;;1.42 Definir una funcin que tome como argumentos una lista y
;;un nmero variable de tomos y devuelva una lista con los
;;resultados de aplicar la funcin MEMBER con cada uno de los
;;tomos y la lista.
;;Modificar la funcin anterior de forma que devuelva NIL si
;;alguno de los tomos no es miembro de la lista. En caso contrario,
;;el resultado de aplicar MEMBER al ltimo tomo.
(defun suma.2 (x y)
(iterar.con.contador ((total x (1+ total))
(cont y (1- cont)))
((zerop cont) total)
(print total) (print cont)))
;;1.46 Definir mediante una macro una funcin iterativa que realice
;;algo (el cuerpo) un nmero de veces. Suponer que la llamada a la
;;funcin se hace de la siguiente forma:
;;(DOTIMES ( <var> <cont> <result> ) <cuerpo>)
;;donde var es una variable que va a contar el nmero de
;;iteraciones que se han realizado, su valor inicial ser cero y se
ir
;;incrementando hasta que valga el valor dado en cont. Al final,
;;despus de haber realizado cont veces el cuerpo se devolver el
;;valor almacenado en result.
;;1.50 Una pila puede ser considerada como una lista a la que
;;puede accederse mediante las operaciones INTRODUCIR que
;;aade un nuevo elemento al principio de la lista que representa la
;;pila y SACAR que obtiene el primer elemento de dicha lista.
;;Definir ambas operaciones mediante el uso de macros.
;;1.53 Definir una macro que aada un tomo al final de una lista
(array-dimension myarr 0)
(array-rank myarr)
(aref myarr 2 2)
(defun range (s e)
(do ((i s (1+ i))
(acc () (append acc (list i))))
((= i e) acc)))
(defun square-matrixp (m)
(apply #'= (array-dimensions m)))
(let* ((d 3)
(m (make-array (list d d))))
(dotimes (i d)
(dotimes (j d)
(setf (aref m i j)
(sqrt (+ (- (- (1- d) i)
(- 0 j))))))) m)
(prog (res)
(dotimes (i 10)
(dotimes (j 20)
(setf (aref m i j) (+ i j))
(when (= i j)
(setf res (cons (+ i j) res)))))
(return (reverse res)))
Ejercicios de LISP
Ejercicio # 1
1. Descripcin
Crear una funcin que dada una lista de como resultado una nueva lista pero solo con el
primer y ltimo elemento de la lista original.
2. Solucin
3. Ejecucin
Ejercicio # 2
1. Descripcin
Crear una funcin recursiva que dad una lista como parmetro retorne la sumatoria de
todos sus elementos.
2. Solucin
3. Ejecucin
Ejercicio # 3
1. Descripcin
2. Solucin
(defun recorre (a b)
3. Ejecucin
Ejercicio # 4
1. Descripcin
Crear una funcin en LISP que permita realizar suma de listas pares.
(suma_pares ((1 2) (3 4) (5 6) (7 8))
(4 6) (13 14)
2. Solucin
3. Ejecucin
Ejercicio # 5
1. Descripcin
Defina una funcin llamada ensimo en donde dada un nmero n y una lista. Elimine el
ensimo termino de lista
2. Solucin
(defun enesimo (n a)
(setq C 1)
(ene n a))
(defun ene (n a)
3. Ejecucin
CL-USER1 > (defun suma (L)(if(null L) 0 (+ (car L) (suma (cdr L)))))SUMACL-USER 2 > suma '(1 2
34)10
2.
L
(tomos o sublistas)