Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso: Inteligencia Artificial Profesor: Hugo Vega Huerta Alumno: Ramos Tanca Jose Joel Codigo: 03200105 Tema: 10 Ejemplos de Recursividad en Lisp
2011-I
Ejemplos de recursividad 1_ Obtenga la suma de los n primeros nmeros enteros positivos sumapositivos(x)= 1 x + sumapositivos (x-1) Si x=1 Otro caso
En Lisp: CL-USER 15 : 3 > (defun sumapositivos(x) (if(= x 1) 1 (+ x (sumapositivos(- x 1))))) SUMAPOSITIVOS CL-USER 16 : 3 > sumapositivos 4 10 2_ Obtenga el exponente de u n numero dado la base y el exponente a y b de manera recursiva
power(a,b)=
1 base*power(base,exponente-1)
En lisp: CL-USER 10 : 3 > (defun power(base exponente) (if(eq exponente 0) 1 (* base (power base (exponente 1))))) POWER CL-USER 11 : 3 > power 4 5 1024 3_ Obtener el producto de 2 enteros a y b de manera recursiva producto(a,b)= a a+producto(a,b-1) b=1 otro caso
En lisp:
CL-USER 17 : 3 > (defun producto(a b) (if(eq b 1) a (+ a (producto a (- b 1))))) PRODUCTO CL-USER 19 : 3 > producto 80 50 4000
4_ Calcule el ensimo numero fibonacci mediante una funcin recursiva 0 fibo(n)= 1 si n=1 si n=2
fibo(n-1)+fibo(n-2)
En Lisp: CL-USER 17 > (defun fibo(a) (if(eq a 1) 0 (if(eq a 2) 1 (+ (fibo(- a 1)) (fibo(- a 2)))))) FIBO CL-USER 18 > fibo 5 3
5_ Calcule el numero de atomos : En Lisp: CL-USER 26 : 1 > (defun cuentaatomos (expr)(cond ((null expr) 0)((atom expr) 1)(t (+ (cuentaatomos (first expr))(cuenta-atomos (rest expr)))))) CUENTAATOMOS l CL-USER 25 : 1 > cuentaatomos '(a b c) 3 6_ Nmero de sublistas de una lista (nmero de veces que se abre parntesis, menos 1) CL-USER 29 : 1 > (defun sublistas (expresion)(cond ((or (null expresion) (atom expresion))0)(t (+ (if (atom (first expresion)) 0 1)(sublistas (first expresion)) (sublistas (rest expresion)))))) SUBLISTAS CL-USER 30 : 1 > (sublistas (a (b c) ((d e) f))) 3 7_ Producto escalar CL-USER 3 : 4 > (defun producto (vector1 vector2)(if (or (null vector1) (null vector2))0(+ (* (first vector1) (first vector2))(producto (rest vector1) (rest vector2))))) PRODUCTO CL-USER 3 : 1 > (producto '(2 3) '(4 5)) CL-USER 3 > 3 8_ Calculo de la potencia de un numero optimizado CL-USER 3 : 1 > (defun potencia (x n);; Optimizacion calculo potencia"(cond ((= n 0) 1)
((evenp n) (expt (potencia x (/ n 2)) 2)) En Lisp: (t (* x (potencia x (- n 1)))))) POTENCIA CL-USER 4 : 1 > (potencia 2 3) CL-USER 3 > 8 9_ Objetivo: sin utilizar remove-if, conseguir la misma funcionalidad del operador: CL-USER 7 : 1 > (defun quitar-si (predicado lista)(cond((null lista) nil)((funcall predicado (car lista))(quitar-si predicado (cdr lista)))(t (cons (car lista) (quitar-si predicado (cdr lista)))))) QUITAR-SI CL-USER 8 : 1 > (quitar-si evenp '(1 2 3 4)) (1 3) 10_ Calcule el factorial de un numero En lisp: CL-USER 1 > (defun facto(x) (if(eq x 0) 1 (* x (facto(- x 1))))) FACTO CL-USER 3 > facto 3 6