segundo problemario lisp
DESCRIPTION
contiene progrmas practicos en lenguaje lispTRANSCRIPT
Problemario resuelto de LISP 2
(Manejo de listas)
1. Declaración de listas
> '(1 2 3)
(1 2 3) Nota: La lista no se guarda
2. Almacenamiento de listas
> (setf lista1 '(hugo paco luis) )
(HUGO PACO LUIS)
> (setf lista2 '(perro gato mapache) )
(PERRO GATO MAPACHE)
> (setf lista3 '(666 2012 2000) )
(666 2012 Y2K)
3. Verificar si algo es una lista
> (listp lista1)
T
> (listp '())
T
> (null lista1)
NIL
> (listp 'hugo)
NIL
> (null 'hugo)
NIL
> (listp hugo)
Err: Variable HUGO has no value
4. Verificar si algo es un átomo
> (atom 'hugo)
T
> (atom '())
T
> (atom 5)
T
> (atom lista1)
NIL
5. Obtener el primer elemento (cabeza) de una lista
> (first lista2)
PERRO
> (car lista2)
PERRO
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
Nota: El valor
booleano T equivale
a “true” (verdadero)
y NIL a “false”
(falso).
8. Pertenencia a una lista
> (find 'paco lista1)
PACO
> (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)
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 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
> (cons '(viernes 13 ) lista3)
((VIERNES 13) 666 2012 2000)
> (cons (first lista2) (rest lista2))
(PERRO GATO MAPACHE)
> (setf lista1b (cons 'daisy lista1))
(DAISY HUGO PACO LUIS)
> lista1b
(DAISY HUGO PACO LUIS)
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)
15. Eliminar el último elemento de una lista (“butlast”)
> (reverse (rest (reverse lista1)))
(HUGO PACO)
Nota: La lista tiene
que asignarse a otra
variable para ser
preservarda.
Nota: La lista tiene
que asignarse a otra
variable para ser
preservada.
Nota: La lista tiene
que ser asignada a
otra variable para
preservarse.
16. Eliminar un elemento de una lista
> (remove 'paco lista1)
(HUGO LUIS)
> lista1
(HUGO PACO LUIS)
> (setf lista1 (remove 'paco lista1))
(HUGO LUIS)
> lista1
(HUGO LUIS)
17. Agregar un elemento al principio de una lista (comportamiento de “stack”, operación 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”, operación destructiva)
> (pop lista1)
DONALD
> lista1
(HUGO PACO LUIS)
19. Obtener el n-ésimo elemento de una lista
> (nth 0 lista3)
666
> (nth 1 lista3)
2012
> (nth 2 lista3)
Y2K
> (nth 3 lista3)
NIL
20. Ejecutar una instrucción 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)
> (apply #'max '(10 25 3 2 5))
25
21. Aplicar una instrucción 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
remove no es
destructivo, es
decir, no modifica
la lista original.
Nota: La lista resultante tiene que ser
asignada a la misma variable para
preservar la modificación.
Nota: El comando
apply es similar a
aplicar una fórmula
sobre un rango de
celdas de Excel.
Nota: El comando
mapcar es similar a
aplicar una fórmula
sobre cada una de las
celdas de un rango
rango de celdas de
Excel.