You are on page 1of 4

RECURSION

En Lisp podemos aplicar la recursión de funciones mediante el comando defun..

EJERCICIO 1:

LONGITUD DE LISTA

CL-USER 1 > (defun longitud(l)


(cond((null l) 0)
(t(+ 1(longitud( rest l))))))
LONGITUD

CL-USER 2 > (longitud '(a b c ( d e f) g h))


6

EJERCICIO 2:

FACTORIAL

CL-USER 4 > ( defun fact(n)


(if(eq n 0)
1
(* n (fact(- n 1)))))
FACT

CL-USER 6 : 1 > (fact 4)


24

EJERCICIO 3:

UTIMO ELEMNTO DE LA LISTA

(defun último (lista)

(cond ((null (cdr lista)) (car lista))

(t (último (cdr lista)))))

último '(1 2 3 4 5 6 7) => 7


EJERCICIO 4:

POTENCIA

CL-USER 1 > (defun potencia (N1 N2)


(cond ( (and (= N1 0) (= N2 0)) ‘Indeterminado)
( (= N1 0) 0)
( (= N2 0) 1)
(T (* N1 (potencia N1 (- N2 1)))) ) )
POTENCIA

CL-USER 2 > (potencia 2 3)


8

EJERCICIO 5:

ELIMINA UNO

3CL-USER 13 : 2 > ( defun elimina-uno(x l)


(cond (( endp l) l)
(( equal x (first l)) (rest l))
(t ( cons (first l) (elimina-uno x (rest l))))))
ELIMINA-UNO

CL-USER 14 : 2 > (elimina-uno 3 '( 1 2 3))


(1 2)

EJERCICIO 6:

SUBCONJUNTO

CL-USER 16 : 2 > (defun subconjunto (l1 l2)


(if (endp l1)
t
(and (member (first l1) l2)
( subconjunto (rest l1) l2))))
SUBCONJUNTO

CL-USER 18 : 3 > ( subconjunto '(4 3) '( 3 5 6 4))


T
EJERCICIO 7:

MULTIPLICACION

CL-USER 1 > (defun multiply (x y)


(cond ((= x 0) 0)
(t (+ y (multiply (- x 1) y)
)
)
)

)
MULTIPLY

CL-USER 2 > (multiply 2 4)


8

EJERCICIO 8:

MCD

CL-USER 4 : 2 > (defun mcd (n m)


(if (zerop n)
m
(mcd (- m (* (truncate (/ m n)) n)) n)))
MCD

CL-USER 5 : 2 > (mcd 2 12)


2

EJERCICIO 9:

NUMERO IMPAR

Oddp:indica si el numero evaluado es impar


CL-USER 4 > (defun existe-impar(x)

(cond((null x) nil)
((oddp(car x)) t)
(t (existe-impar(cdr x)))))
EXISTE-IMPAR

CL-USER 5 > (existe-impar '(2 4 3 6))


T
EJERCICIO 10:

FIBONACCI DE LUGAR N

CL-USER 6 > (defun fibo(n)

(if(< n 2)

(+ (fibo(- n 1))(fibo(- n 2)))))

FIBO

CL-USER 7 > (fibo 4)

EJERCICIO 11:

INVERTIR UNA LISTA

(defun invertir (lista)


( if lista
( append (last lista)
( invertir (butlast lista)))))

CL-USER 2 > (invertir '( 1 2 3 4 ))


(4 3 2 1)

You might also like