Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Ejemplos de recursividad, (1)
z Ejemplo del cálculo de la potencia de
un número optimizada
> (defun potencia (x n)
;; “Optimizacion calculo potencia"
(cond ((= n 0) 1)
((evenp n) (expt (potencia x (/ n 2)) 2)
)
(t (* x (potencia x (- n 1))))))
> (potencia 2 3)
8
2
Ejemplos de recursividad, (3)
z Aplanar una lista:
» (aplana ‘(a (b c) ((d e) f))) >>>
(A B C D E F)
3
Ejemplos de recursividad, (5)
z Producto escalar:
» (producto '(2 3) '(4 5)) >>> 23
» 2 x 4 + 3 x 5 = 23
z Versiones válidas:
» Versión recursiva:
> (defun producto (vector1 vector2)
(if (or (null vector1) (null vector2))
0
(+ (* (first vector1) (first vector2))
(producto (rest vector1) (rest vector2)))))
4
Ejemplos de recursividad, (7)
> (defun profundidad-maxima (expresion)
(cond ((null expresion) 0)
((atom expresion) 1)
(t (+ 1
(apply #'max
(mapcar
#'profundidad-maxima
expresion))))))
>>> PROFUNDIDAD-MAXIMA
> (profundidad-maxima '(1))
>>>> 2
> (profundidad-maxima '((1 (2 (3))) 4))
>>>> 5
» COUNT / COUNT-IF
– Contar apariciones:
z (count <elemento> <lista>
[:test <fun-igualdad>])
» (count 2 ‘(1 2 3 4 2 4 5 2))
3
– Contar los elementos que cumplen /no cumplen
una condición de una lista
z (count-if[-not] <predicado><lista>
10
5
Repaso de operadores, (2)
» FIND / FIND-IF
– Devuelve la primera aparición:
z (find <elemento> <lista>
[:test <fun-igualdad>])
» (find 2 ‘(1 2 3 4 2 4 5 2))
2
– Devuelve el primer elemento que cumple/o no cumple
el predicado
z (find-if[-not] <predicado><lista>
» REMOVE / REMOVE-IF
– Borrar las apariciones de un elemento indicado
z (remove <elemento> <lista>
[:test <fun-igualdad>])
» (remove 2 ‘(1 2 3 4 2 4 5 2))
(1 3 4 4 5)
– Elimina los que cumple/o no cumple el predicado
z (remove-if[-not] <predicado><lista>
12
6
Ejemplos de recursividad, (9)
z Recorriendo la lista con dolist:
13
14