Está en la página 1de 3

Problemario resuelto de LISP 2

(Manejo de listas)
1.

Declaracin de listas

4. Verificar si algo es un tomo

> '(1 2 3)
(1 2 3)

Nota: La lista no se guarda

> (atom 'hugo)


T
> (atom '())
T

2. Almacenamiento de listas
> (setf lista1 '(hugo paco luis) )
(HUGO PACO LUIS)

> (atom 5)
T

> (setf lista2 '(perro gato mapache) )


(PERRO GATO MAPACHE)

> (atom lista1)


NIL

> (setf lista3 '(666 2012 2000) )


(666 2012 Y2K)

> (first lista2)


PERRO

3. Verificar si algo es una lista


> (listp lista1)
T
> (listp '())
T
> (null lista1)
NIL
> (listp 'hugo)
NIL

5. Obtener el primer elemento (cabeza) de una lista

> (car lista2)


PERRO
Nota: El valor
booleano T equivale
a true (verdadero)
y NIL a false
(falso).

> (null 'hugo)


NIL
> (listp hugo)
Err: Variable HUGO has no value

6. Obtener el resto (cola) de una lista


> (rest lista2)
(GATO MAPACHE)
> (cdr lista2)
(GATO MAPACHE)
7. Obtener la longitud de una lista
> (length lista2)
3
> (length '())
0

> (cons '(viernes 13 ) lista3)


((VIERNES 13) 666 2012 2000)

8. Pertenencia a una lista


> (find 'paco lista1)
PACO

> (cons (first lista2) (rest lista2))


(PERRO GATO MAPACHE)

> (find 'paco lista2)


NIL
> (if (find 'paco lista1) 'yes 'no)
YES
> (if (find 'paco lista1) T NIL)
9. Copiar listas.
> (setf lista3 lista1)
(HUGO PACO LUIS)

> (setf lista1b (cons 'daisy lista1))


(DAISY HUGO PACO LUIS)
> lista1b
(DAISY HUGO PACO LUIS)

Nota: La lista tiene


que asignarse a otra
variable para ser
preservarda.
preservada.

10. Unir varios tomos en una lista.


> (list 'A '(B C) (+ 2 3))
(A (B C) 5)
> (list 'A '(B C) '(+ 2 3))
(A (B C) (+ 2 3))
Nota: Las listas no se guardan

12. Unir dos listas


> (append lista1 lista2)
(HUGO PACO LUIS PERRO GATO MAPACHE)

13. Invertir una lista


> (reverse lista1)
(LUIS PACO HUGO)
14. Eliminar el primer elemento de una lista (butfirst)
> (rest lista1)
(PACO LUIS)

11. Agregar un elemento al principio de una lista.


> (cons 'daisy lista1)
(DAISY HUGO PACO LUIS)
> lista1
(HUGO PACO LUIS)
Nota: La lista construida no se guarda

15. Eliminar el ltimo elemento de una lista (butlast)


> (reverse (rest (reverse lista1)))
(HUGO PACO)

Nota: La lista tiene


que ser asignada a
otra variable para
preservarse.

16. Eliminar un elemento de una lista

19. Obtener el n-simo elemento de una lista

> (remove 'paco lista1)


(HUGO LUIS)

Nota: El comando

> lista1
(HUGO PACO LUIS)

destructivo, es

remove no es
decir, no modifica
la lista original.

> (setf lista1 (remove 'paco lista1))


(HUGO LUIS)
> lista1
(HUGO LUIS)
Nota: La lista resultante tiene que ser
asignada a la misma variable para
preservar la modificacin.
17. Agregar un elemento al principio de una lista
(comportamiento de stack, operacin destructiva)
> (push 'donald lista1)
(DONALD HUGO PACO LUIS)
> lista1
(DONALD HUGO PACO LUIS)
18. Eliminar un elemento del principio de una lista
(comportamiento de stack, operacin destructiva)
> (pop lista1)
DONALD
> lista1
(HUGO PACO LUIS)

> (nth 0 lista3)


666
> (nth 1 lista3)
2012
> (nth 2 lista3)
Y2K
> (nth 3 lista3)
NIL
20. Ejecutar una instruccin sobre todos los elementos de una
lista
> (apply #'+ '(10 25 3 2 5))
45
> (apply #'* '(10 25 3 2 5))
7500
> (apply #'list '(10 25 3 2 5))
(10 25 3 2 5)

Nota: El comando
apply es similar a
aplicar una frmula
sobre un rango de
celdas de Excel.

> (apply #'max '(10 25 3 2 5))


25
21. Aplicar una instruccin sobre cada elementos en una lista
> (defun sucesor (x) (+ x 1))
SUCESOR
> (mapcar 'sucesor '(10 25 3 2 5))
(11 26 4 3 6)
> (defun doble (x) (* x 2))
SUCESOR
> (mapcar 'sucesor '(10 25 3 2 5))
(20 50 6 4 10)

Nota: El comando
mapcar es similar a
aplicar una frmula
sobre cada una de las
celdas de un rango
rango de celdas de
Excel.

También podría gustarte