segundo problemario lisp

3
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).

Upload: ivan-hernandez-sanchez

Post on 31-Jan-2016

216 views

Category:

Documents


0 download

DESCRIPTION

contiene progrmas practicos en lenguaje lisp

TRANSCRIPT

Page 1: Segundo Problemario LISP

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).

Page 2: Segundo Problemario LISP

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.

Page 3: Segundo Problemario LISP

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.