Está en la página 1de 215

Contenidos

Objetivos
Historia de Lisp
Programación
Resumen

Programación básica en Lisp

Pedro J. Morales
Digital Audio & Computer Music Laboratory. UCLM

July 29, 2007

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

1 Objetivos

2 Historia de Lisp

3 Programación

4 Resumen

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Objetivos

Aproximación histórica.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Objetivos

Aproximación histórica.
Programación básica.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

1960. John McCarthy publica un estudio crucial para la


programación.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

1960. John McCarthy publica un estudio crucial para la


programación.
Con unos pocos operadores y notación para funciones se
puede construir un lenguaje.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

1960. John McCarthy publica un estudio crucial para la


programación.
Con unos pocos operadores y notación para funciones se
puede construir un lenguaje.
Llamó al lenguaje LISP, por “List Processing”

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

1960. John McCarthy publica un estudio crucial para la


programación.
Con unos pocos operadores y notación para funciones se
puede construir un lenguaje.
Llamó al lenguaje LISP, por “List Processing”
Usaba la lista como estructura para representar tanto datos
como programas.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

El descubrimiento de McCarthy es un hito en la historia de la


programación. . .

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

El descubrimiento de McCarthy es un hito en la historia de la


programación. . .
. . . también es un modelo que marca la tendencia de los
lenguajes actuales.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

El descubrimiento de McCarthy es un hito en la historia de la


programación. . .
. . . también es un modelo que marca la tendencia de los
lenguajes actuales.
Hay dos modelos: C y Lisp

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aproximación histórica

El descubrimiento de McCarthy es un hito en la historia de la


programación. . .
. . . también es un modelo que marca la tendencia de los
lenguajes actuales.
Hay dos modelos: C y Lisp
Los lenguajes diseñados en los últimos 20 años se basan en el
modelo de C al que añaden partes de Lisp.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp es un lenguaje configurable

Lisp es el lenguaje más antiguo que se mantiene activo.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp es un lenguaje configurable

Lisp es el lenguaje más antiguo que se mantiene activo.


Lisp se puede programar en Lisp.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp es un lenguaje configurable

Lisp es el lenguaje más antiguo que se mantiene activo.


Lisp se puede programar en Lisp.
Lisp se adapta a cualquier paradigma de programación.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp en la actualidad

Hay diversas variantes que se han decantado en dos dialectos.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp en la actualidad

Hay diversas variantes que se han decantado en dos dialectos.


Common Lisp es la variante maximalista.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Lisp en la actualidad

Hay diversas variantes que se han decantado en dos dialectos.


Common Lisp es la variante maximalista.
Scheme es minimalista.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts
Emacs, editor de texto, elisp.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts
Emacs, editor de texto, elisp.
GIMP, editor de gráficos, Scheme.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts
Emacs, editor de texto, elisp.
GIMP, editor de gráficos, Scheme.
Audacity, editor de audio, Nyquist (XLisp).

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts
Emacs, editor de texto, elisp.
GIMP, editor de gráficos, Scheme.
Audacity, editor de audio, Nyquist (XLisp).
LilyPond, partituras musicales, Scheme.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Aplicaciones

Además de las implementaciones de Lisp como lenguaje, las


versiones más pequeñas
Scheme
Subconjuntos de Common Lisp: XLisp, elisp.
Se empotran en aplicaciones especı́ficas como lenguajes de
scripts
Emacs, editor de texto, elisp.
GIMP, editor de gráficos, Scheme.
Audacity, editor de audio, Nyquist (XLisp).
LilyPond, partituras musicales, Scheme.
AutoCAD, diseño técnico, AutoLisp (XLisp).

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones en Lisp

Expresiones
Lisp evalúa expresiones.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones en Lisp

Expresiones
Lisp evalúa expresiones.
Una expresión es:

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones en Lisp

Expresiones
Lisp evalúa expresiones.
Una expresión es:
Un átomo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones en Lisp

Expresiones
Lisp evalúa expresiones.
Una expresión es:
Un átomo
Una lista.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos:

Listas

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415

Listas

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos

Listas

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos a, nota, c4,
mesa

Listas

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos a, nota, c4,
mesa

Listas
Se escriben entre paréntesis.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos a, nota, c4,
mesa

Listas
Se escriben entre paréntesis.
Contienen un conjunto de elementos ordenados:
(2 45 27), (nota c4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos a, nota, c4,
mesa

Listas
Se escriben entre paréntesis.
Contienen un conjunto de elementos ordenados:
(2 45 27), (nota c4)
Puede estar vacı́a: ()

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Tipos básicos de datos

Átomos
Numéricos: 7, 12.0, 3.1415
Sı́mbolo: Secuencia de caracteres alfanuméricos a, nota, c4,
mesa

Listas
Se escriben entre paréntesis.
Contienen un conjunto de elementos ordenados:
(2 45 27), (nota c4)
Puede estar vacı́a: ()
O contener elementos que sean listas: (a (b c) (d (e f)))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Bucle WAIT-READ-EVAL-PRINT

WAIT Lisp muestra el prompt y espera >

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Bucle WAIT-READ-EVAL-PRINT

WAIT Lisp muestra el prompt y espera >


READ El usuario escribe una expresión > (+ 3 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Bucle WAIT-READ-EVAL-PRINT

WAIT Lisp muestra el prompt y espera >


READ El usuario escribe una expresión > (+ 3 4)
EVAL Lisp evalúa la expresión.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Bucle WAIT-READ-EVAL-PRINT

WAIT Lisp muestra el prompt y espera >


READ El usuario escribe una expresión > (+ 3 4)
EVAL Lisp evalúa la expresión.
PRINT Lisp escribe el resultado > 7

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de átomos

Numéricos: Devuelven su valor.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de átomos

Numéricos: Devuelven su valor.


Simbólicos: Si el nombre comienza por : devuelve el mismo
nombre.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de átomos

Numéricos: Devuelven su valor.


Simbólicos: Si el nombre comienza por : devuelve el mismo
nombre.
Si tiene ligado un valor devuelve ese valor.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de átomos

Numéricos: Devuelven su valor.


Simbólicos: Si el nombre comienza por : devuelve el mismo
nombre.
Si tiene ligado un valor devuelve ese valor.
Si no tiene valor ligado, devuelve un error.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6
5.6

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6
5.6
> :zx

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6
5.6
> :zx
:ZX

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6
5.6
> :zx
:ZX
> dfg

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Ejemplos

> 5.6
5.6
> :zx
:ZX
> dfg
error: unbound variable - DFG
if continued: try evaluating symbol again
1>

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3 -> (+ 4 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3 -> (+ 4 3)
4 + 3 (7 - 6)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3 -> (+ 4 3)
4 + 3 (7 - 6) -> (+ 4 (* 3 (- 7 6)))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3 -> (+ 4 3)
4 + 3 (7 - 6) -> (+ 4 (* 3 (- 7 6)))

El primer elemento de la lista es la operación

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Expresiones matemáticas

Se utiliza la notación prefija.

4 + 3 -> (+ 4 3)
4 + 3 (7 - 6) -> (+ 4 (* 3 (- 7 6)))

El primer elemento de la lista es la operación


Los demás elementos son los operandos.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)
(+ (* 3 1) 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)
(+ (* 3 1) 4)
(+ (* 3 1) 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)
(+ (* 3 1) 4)
(+ (* 3 1) 4)
(+ 3 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)
(+ (* 3 1) 4)
(+ (* 3 1) 4)
(+ 3 4)
(+ 3 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Orden normal de evaluación

La evaluación empieza por las listas más internas de la expresión.

(+ (* 3 (- 7 6)) 4)
(+ (* 3 1) 4)
(+ (* 3 1) 4)
(+ 3 4)
(+ 3 4)
7

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación n de funciones

El primer elemento de la lista es una función


Se evalúa el resto de los elementos.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación n de funciones

El primer elemento de la lista es una función


Se evalúa el resto de los elementos.
Se aplican como argumentos a la función.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))


; se evalua el segundo argumento

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))


; se evalua el segundo argumento
; se asigna el valor del segundo argumento
; al simbolo (que es el primer argumento)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))


; se evalua el segundo argumento
; se asigna el valor del segundo argumento
; al simbolo (que es el primer argumento)
> -1 ; resultado

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))


; se evalua el segundo argumento
; se asigna el valor del segundo argumento
; al simbolo (que es el primer argumento)
> -1 ; resultado
> x ; el valor asignado a x es

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Evaluación de formas especiales

Las formas especiales evalúan sus argumentos en distinto orden


que las funciones.

> (setq x (- 2 3))


; se evalua el segundo argumento
; se asigna el valor del segundo argumento
; al simbolo (que es el primer argumento)
> -1 ; resultado
> x ; el valor asignado a x es
> -1
>

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. SETQ

SETQ
Liga un valor a un sı́mbolo.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. SETQ

SETQ
Liga un valor a un sı́mbolo.
(setq sı́mbolo valor)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. SETQ

SETQ
Liga un valor a un sı́mbolo.
(setq sı́mbolo valor)

Ejemplos
> (setq x 25)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. SETQ

SETQ
Liga un valor a un sı́mbolo.
(setq sı́mbolo valor)

Ejemplos
> (setq x 25)
> (setq do-central :c4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.
(let (ligaduras) expresiones)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.
(let (ligaduras) expresiones)

Ejemplos
> (let ((a 2) (b 3) (c 4)) (+ a (* 2 b) (/ c 2)))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.
(let (ligaduras) expresiones)

Ejemplos
> (let ((a 2) (b 3) (c 4)) (+ a (* 2 b) (/ c 2)))
10

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.
(let (ligaduras) expresiones)

Ejemplos
> (let ((a 2) (b 3) (c 4)) (+ a (* 2 b) (/ c 2)))
10
> a

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LET

LET
Liga valores locales a uno, varios o ningún sı́mbolo.
(let (ligaduras) expresiones)

Ejemplos
> (let ((a 2) (b 3) (c 4)) (+ a (* 2 b) (/ c 2)))
10
> a
error: unbound variable - A

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. COND

COND
Evalúa expresiones de manera condicional.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. COND

COND
Evalúa expresiones de manera condicional.
(cond (expresión-lógica expresiones*)*)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. COND

COND
Evalúa expresiones de manera condicional.
(cond (expresión-lógica expresiones*)*)

Ejemplos
> (let ((a 1) (b 2) (c 1) (d 1))
(cond ((eql a b) 1)
((eql a c) "Primera expresion" 2)
((eql a d) 3)))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. COND

COND
Evalúa expresiones de manera condicional.
(cond (expresión-lógica expresiones*)*)

Ejemplos
> (let ((a 1) (b 2) (c 1) (d 1))
(cond ((eql a b) 1)
((eql a c) "Primera expresion" 2)
((eql a d) 3)))
2

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)
a

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)
a
> (setq a (quote b))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)
a
> (setq a (quote b))
b

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)
a
> (setq a (quote b))
b
> a

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. QUOTE

QUOTE
Bloquea la evaluación.
(quote sı́mbolo) devuelve sı́mbolo
Notación equivalente: ’sı́mbolo

Ejemplos
> (quote a)
a
> (setq a (quote b))
b
> a
b

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)
(a . b)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)
(a . b)
> (cons ’a ())

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)
(a . b)
> (cons ’a ())
(a)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)
(a . b)
> (cons ’a ())
(a)
> (cons ’a (cons ’b ()))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. CONS

CONS
Constructor de un par ordenado. Puede construir listas.
(cons primer-elemento segundo-elemento)

Ejemplos
> (cons ’a ’b)
(a . b)
> (cons ’a ())
(a)
> (cons ’a (cons ’b ()))
(a b)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.
(list elemento-1 elemento-2 elemento-3 . . . )

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.
(list elemento-1 elemento-2 elemento-3 . . . )

Ejemplos
> (list 1 2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.
(list elemento-1 elemento-2 elemento-3 . . . )

Ejemplos
> (list 1 2 3)
(1 2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.
(list elemento-1 elemento-2 elemento-3 . . . )

Ejemplos
> (list 1 2 3)
(1 2 3)
> (list 1 ’a :hola ‘‘cadena’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LIST

LIST
Construye listas de forma más sencilla que CONS.
(list elemento-1 elemento-2 elemento-3 . . . )

Ejemplos
> (list 1 2 3)
(1 2 3)
> (list 1 ’a :hola ‘‘cadena’’)
(1 a :hola ‘‘cadena’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (setq lista-2 (list 1 ’a :hola ‘‘cadena’’))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (setq lista-2 (list 1 ’a :hola ‘‘cadena’’))
(1 a :hola ‘‘cadena’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (setq lista-2 (list 1 ’a :hola ‘‘cadena’’))
(1 a :hola ‘‘cadena’’)
> (append lista-1 lista-2)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. APPEND

APPEND
Concatena listas.
(append lista-1 lista-2 lista-3 . . . )

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (setq lista-2 (list 1 ’a :hola ‘‘cadena’’))
(1 a :hola ‘‘cadena’’)
> (append lista-1 lista-2)
(1 2 3 1 a :hola ‘‘cadena’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (first lista-1)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (first lista-1)
1

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (first lista-1)
1
> (first (cons 5 7))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. FIRST

FIRST. Equivalente a CAR.


Selecciona el primer elemento de un par ordenado (o lista).
(first lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (first lista-1)
1
> (first (cons 5 7))
5

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)
(2 3)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)
(2 3)
> (rest (cons 5 7))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)
(2 3)
> (rest (cons 5 7))
7

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)
(2 3)
> (rest (cons 5 7))
7
> (first (rest lista-1))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. REST


REST. Equivalente a CDR.
Selecciona el segundo elemento de un par ordenado (o la lista
que sigue al primer elemento de una lista).
(rest lista)

Ejemplos
> (setq lista-1 (list 1 2 3))
(1 2 3)
> (rest lista-1)
(2 3)
> (rest (cons 5 7))
7
> (first (rest lista-1))
2
PJM Programación básica en Lisp
Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)
T

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)
T
> (eq ’a ’b)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)
T
> (eq ’a ’b)
NIL

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)
T
> (eq ’a ’b)
NIL
> (eq (list 1 2 3) (list 1 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. EQ

EQ.
Detecta si el valor de un sı́mbolo es idéntico a otro.
(eq sı́mbolo-1 sı́mbolo-2)

Ejemplos
> (eq ’a ’a)
T
> (eq ’a ’b)
NIL
> (eq (list 1 2 3) (list 1 2 3))
NIL

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFUN


DEFUN.
Sirve para definir una función de usuario y ligarla a un
sı́mbolo.

Ejemplo: Cálculo de la hipotenusa

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFUN


DEFUN.
Sirve para definir una función de usuario y ligarla a un
sı́mbolo.
(defun nombre-función lista-de-argumentos cuerpo)

Ejemplo: Cálculo de la hipotenusa

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFUN


DEFUN.
Sirve para definir una función de usuario y ligarla a un
sı́mbolo.
(defun nombre-función lista-de-argumentos cuerpo)

Ejemplo: Cálculo de la hipotenusa

(defun pitagoras (a b)
(sqrt (+ (expt a 2.0) (expt b 2.0))))

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFUN


DEFUN.
Sirve para definir una función de usuario y ligarla a un
sı́mbolo.
(defun nombre-función lista-de-argumentos cuerpo)

Ejemplo: Cálculo de la hipotenusa

(defun pitagoras (a b)
(sqrt (+ (expt a 2.0) (expt b 2.0))))

Ejemplos
> (pitagoras 3 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFUN


DEFUN.
Sirve para definir una función de usuario y ligarla a un
sı́mbolo.
(defun nombre-función lista-de-argumentos cuerpo)

Ejemplo: Cálculo de la hipotenusa

(defun pitagoras (a b)
(sqrt (+ (expt a 2.0) (expt b 2.0))))

Ejemplos
> (pitagoras 3 4)
5
PJM Programación básica en Lisp
Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad
25

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad
25
> (function identidad)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad
25
> (function identidad)
#<Closure-IDENTIDAD: #82ae524>

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad
25
> (function identidad)
#<Closure-IDENTIDAD: #82ae524>
> #’identidad

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica.

Un sı́mbolo puede estar ligado a un valor y una función.


> (setq identidad 25)
25
> (defun identidad (a) a)
IDENTIDAD
> identidad
25
> (function identidad)
#<Closure-IDENTIDAD: #82ae524>
> #’identidad
#<Closure-IDENTIDAD: #82ae524>

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LAMBDA

LAMBDA.
Devuelve una función sin nombre (sin ligarla a un sı́mbolo).

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LAMBDA

LAMBDA.
Devuelve una función sin nombre (sin ligarla a un sı́mbolo).
(lambda lista-de-argumentos cuerpo)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LAMBDA

LAMBDA.
Devuelve una función sin nombre (sin ligarla a un sı́mbolo).
(lambda lista-de-argumentos cuerpo)

Ejemplos
> ((lambda (a b) (+ a b)) 3 4)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LAMBDA

LAMBDA.
Devuelve una función sin nombre (sin ligarla a un sı́mbolo).
(lambda lista-de-argumentos cuerpo)

Ejemplos
> ((lambda (a b) (+ a b)) 3 4)
7

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)
‘plantilla

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)
‘plantilla

Ejemplos
> ’(a b pi c)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)
‘plantilla

Ejemplos
> ’(a b pi c)
(a b pi c)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)
‘plantilla

Ejemplos
> ’(a b pi c)
(a b pi c)
> ‘(a b ,pi c)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. BACKQUOTE

BACKQUOTE. Abreviatura: ‘
Al aplicarlo a una lista realiza una evaluación selectiva.
Funciona como una plantilla donde sólo se evalúan las
expresiones precedidas por una coma.
(backquote plantilla)
‘plantilla

Ejemplos
> ’(a b pi c)
(a b pi c)
> ‘(a b ,pi c)
(a b 3.1416 c)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.

Ejemplo

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

(defmacro mi-setq (plaza valor)


‘(setq ,plaza ’,valor))

Ejemplos

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

(defmacro mi-setq (plaza valor)


‘(setq ,plaza ’,valor))

Ejemplos
> (mi-setq a b)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

(defmacro mi-setq (plaza valor)


‘(setq ,plaza ’,valor))

Ejemplos
> (mi-setq a b)
B

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

(defmacro mi-setq (plaza valor)


‘(setq ,plaza ’,valor))

Ejemplos
> (mi-setq a b)
B
> a
PJM Programación básica en Lisp
Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. DEFMACRO


DEFMACRO.
Crea una expresión y después la evalúa.
(defmacro nombre-macro lista-de-argumentos cuerpo)

Ejemplo

(defmacro mi-setq (plaza valor)


‘(setq ,plaza ’,valor))

Ejemplos
> (mi-setq a b)
B
> a
B PJM Programación básica en Lisp
Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))
#(NIL NIL NIL NIL)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))
#(NIL NIL NIL NIL)
> (setf (aref mi-array 2) 3.14)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))
#(NIL NIL NIL NIL)
> (setf (aref mi-array 2) 3.14)
3.14

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))
#(NIL NIL NIL NIL)
> (setf (aref mi-array 2) 3.14)
3.14
> mi-array

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos


Array
Colección de datos a los que se accede mediante un ı́ndice
numérico.
Creación: (make-array tamaño)
Acceso: (aref array n)

Ejemplo
> (setq mi-array (make-array 4))
#(NIL NIL NIL NIL)
> (setf (aref mi-array 2) 3.14)
3.14
> mi-array
#(NIL NIL 3.14 NIL)
PJM Programación básica en Lisp
Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’
‘‘mi-cadena’’

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’
‘‘mi-cadena’’
> (setq mi-string ‘‘mi-cadena-2’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’
‘‘mi-cadena’’
> (setq mi-string ‘‘mi-cadena-2’’)
‘‘mi-cadena-2’’

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’
‘‘mi-cadena’’
> (setq mi-string ‘‘mi-cadena-2’’)
‘‘mi-cadena-2’’
> mi-string

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Otros tipos de datos

Strings
Secuencia de caracteres alfanuméricos.
Se autoevalúan.

Ejemplo
> ‘‘mi-cadena’’
‘‘mi-cadena’’
> (setq mi-string ‘‘mi-cadena-2’’)
‘‘mi-cadena-2’’
> mi-string
‘‘mi-cadena-2’’

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo
> (setq a (read))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo
> (setq a (read))
56

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo
> (setq a (read))
56
56

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo
> (setq a (read))
56
56
> a

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Entrada

READ
READ convierte los caracteres de entrada en expresiones de
Lisp.
(read)

Ejemplo
> (setq a (read))
56
56
> a
56

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Salida

PRINT
PRINT convierte una expresión de Lisp en una secuencia de
caracteres.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Salida

PRINT
PRINT convierte una expresión de Lisp en una secuencia de
caracteres.
(print expresión)

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Salida

PRINT
PRINT convierte una expresión de Lisp en una secuencia de
caracteres.
(print expresión)

Ejemplo
> (print (list 1 2 3))

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Salida

PRINT
PRINT convierte una expresión de Lisp en una secuencia de
caracteres.
(print expresión)

Ejemplo
> (print (list 1 2 3))
(1 2 3); lo que imprime en la consola

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. Salida

PRINT
PRINT convierte una expresión de Lisp en una secuencia de
caracteres.
(print expresión)

Ejemplo
> (print (list 1 2 3))
(1 2 3); lo que imprime en la consola
(1 2 3); lo que devuelve

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LOAD

LOAD
Carga el código fuente contenido en un archivo.

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LOAD

LOAD
Carga el código fuente contenido en un archivo.
(load path-y-nombre-archivo) ; asume la extensión .lsp

Ejemplo

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LOAD

LOAD
Carga el código fuente contenido en un archivo.
(load path-y-nombre-archivo) ; asume la extensión .lsp

Ejemplo
> (load ‘‘mifichero’’)

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Referencia básica. LOAD

LOAD
Carga el código fuente contenido en un archivo.
(load path-y-nombre-archivo) ; asume la extensión .lsp

Ejemplo
> (load ‘‘mifichero’’)
T ; T si lo carga, NIL si no lo carga

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Resumen

Se han mostrado los elementos básicos de Lisp, pero . . .

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Resumen

Se han mostrado los elementos básicos de Lisp, pero . . .


Para realizar proyectos más extensos hay que conocer las
estrategias de programación.

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

Resumen

Se han mostrado los elementos básicos de Lisp, pero . . .


Para realizar proyectos más extensos hay que conocer las
estrategias de programación.
Se recomienda el libro [2] y el manual de referencia [1]

PJM Programación básica en Lisp


Contenidos
Objetivos
Historia de Lisp
Programación
Resumen

[Dannenberg, 2007] Roger B. Dannenberg.


Nyquist Reference Manual, Version 2.33
Carnegie Mellon University, 2007.
[Touretzky, 1990] David Touretzky.
Common Lisp: A Gentle Introduction to Symbolic
Computation.
Carnegie Mellon University, 1990.
http://www.cs.cmu.edu/~dst/LispBook
[Steele, 1990] Guy L. Steele Jr.
Common Lisp the Language, 2nd edition
Digital Press, 1990.
http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2

PJM Programación básica en Lisp

También podría gustarte