Universidad de Concepción
Facultad de Ingeniería
Departamento de Ingeniería
Informática
Y Ciencias de la Computación
MANUAL DE REFERENCIA
MANUAL DE REFERENCIA
MANUAL DE REFERENCIA
MANUAL DE REFERENCIA
RAPIDA DE LISP
RAPIDA DE LISP
RAPIDA DE LISP
RAPIDA DE LISP
Rolando Burgos Cárdenas
Rolando Burgos Cárdenas
Rolando Burgos Cárdenas
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/
e-mail:
[email protected]
Rola
Barrio Universitario, Junio de 1997
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
INDICE
INTRODUCCION
1.1 ATOMOS
1.2 LISTAS
COMANDOS FUNDAMENTALES
1. QUOTE
2. CAR
3. CDR
4. CONS
5. ATOM
6. EQ
7. NULL
ESCRITURA DE PROGRAMAS EN LISP
DATOS ELEMENTALES: VALORES Y TIPOS
FUNCIONES EN LISP
NOMBRES, VARIABLES Y DECLARACIONES
ARRAYS Y OTRAS ESTRUCTURAS DE DATOS
ARRAYS
LISTA DE PROPIEDADES
FUNCIONES BÁSICAS
FUNCIONES ARITMÉTICAS Y ASIGNACIÓN DE VALOR
COMILLA (') Y EVALUACIÓN
FUNCIONES DE MANIPULACIÓN DE LISTAS
ESTRUCTURAS DE CONTROL
EXPRESIONES CONDICIONALES
ITERACIÓN
CRITERIOS DE ENTRADA-SALIDA
SUBPROGRAMAS, FUNCIONES Y BIBLIOTECAS
FUNCIONES, VARIABLES LOCALES Y LA CARACTERISTICA PROGRAM
OTRAS CARACTERISTICAS
DEFINICIÓN Y EXPANSIÓN DE MACROS
EVAL, MAPCAR Y AAPLY
UN EJEMPLO DE APLICACIÓN DE LISP
PROGRAMA
2
2
2
4
4
5
5
6
6
6
7
8
9
10
11
12
12
12
14
14
15
16
19
20
21
23
24
26
28
28
29
31
32
Rola
Página 1
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
INTRODUCCION
LISP es un lenguaje diseñado para la manipulación de
fórmulas simbólicas. Más adelante, nació su aplicación a la inteligencia
artificial. La principal característica de LISP es su habilidad de
expresar algoritmos recursivos que manipulen estructuras de datos
dinámicos.
En LISP existen dos tipos básicos de palabras, los
átomos y las listas. Todas las estructuras definidas posteriormente son
basadas en estas palabras.
1.1 Atomos
Los átomos pueden ser palabras, tal como CASA, SACA,
ATOMO, etc. o cualquier disparate como EDSDS, DFKM454, etc. En general,
un átomo en LISP puede ser cualquier combinación de las 26 letras del
alfabeto (excluyendo obviamente la “ñ”) en conjunto con los 10 dígitos.
Al igual que en otros sistemas, no son átomos aquellas combinaciones que
comienzan con dígitos.
Ejemplos de átomos
•
•
•
•
•
Hola
Casa
Mientras
Uno34
F4fg5
Ejemplos de No átomos
5456dgfv
Ab cd
%bc
A5.)
Comienza con dígito.
Incluye un espacio entre
medio.
No comienza con una letra.
Incluye caracteres que no
son ni letras ni dígitos.
1.2 LISTAS
El segundo tipo de palabras con las que trabaja LISP
son las listas. Una lista es puede ser una secuencia de átomos separados
por un espacio y encerrados por paréntesis redondos, incluyendo la
posibilidad de que una lista contenga una sublista que cumple con las
mismas características.
EJEMPLOS
•
•
•
•
(ESTA ES UNA LISTA)
(ESTALISTAESDISTINTAALAANTERIOR)
(ESTA LISTA (TAMBIEN) ES DISTINTA)
((ESTA ES OTRA) (POSIBILIDAD DE LISTA))
Rola
Página 2
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
En adelante, definiremos TÉRMINO de una lista como un
elemento de una lista, ya sea un átomo o una sublista.
Así, lista quedaría definida como la secuencia:
(término1 término2 ..... términok)
Donde K es el número de elementos de la lista.
EJEMPLOS
NÚMERO DE TÉRMINOS TÉRMINOS
LISTA
(HOLA)
1
(ESTA ES UNA LISTA) 4
((AB T56) HOLA ())
3
paréntesis, en cambio, un átomo no.
• (LISTA) es una lista.
• ATOMO es un átomo.
HOLA
ESTA, ES, UNA, LISTA
(AB T56), HOLA, ()
En LISP, una lista se reconoce porque va entre
¡ IMPORTANTE !
NO OLVIDAR NUNCA DE REVISAR QUE LOS PARENTESIS ESTEN BIEN
Rola
Página 3
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
COMANDOS FUNDAMENTALES
QUOTE
CAR
CDR
CONS
ATOM
EQ
NULL
¡ IMPORTANTE !
SIEMPRE REVISAR QUE LAS FUNCIONES RECIBAN EL NÚMERO CORRECTO DE
ARGUMENTOS
: QUOTE
: Un término cualquiera.
: El argumento.
1. QUOTE
FUNCION
NUMERO DE ARGUMENTOS : 1
ARGUMENTOS
RETORNA
EJEMPLOS
OPERACIÓN
(QUOTE(ESTA ES UNA PRUEBA))
(QUOTE((ESTA)(ES UNA)PRUEBA))
(QUOTE HOLA)
(QUOTE(())
Notar que QUOTE devuelve lo mismo que recibe;
aparentemente esto no tiene mucho sentido, no obstante, la utilidad de
este comando aparece cuando se utiliza, por ejemplo, el comando CAR entre
paréntesis, por ejemplo:
RESULTADO
(ESTA ES UNA PRUEBA)
((ESTA)(ES UNA)PRUEBA)
HOLA
()
(CAR(A B C))
En este caso, CAR buscará el primer elemento de la
lista que genere la función A, pero como A no es una función (a menos que
se defina como tal) generará un error. La sentencia correcta sería:
(CAR(QUOTE(A B C))
Un error común es escribir algo así:
(CAR(QUOTE ERROR))
Ya que en este caso QUOTE retorna el átomo ERROR, y CAR
debe recibir como argumento una lista (ver definición siguiente).
Rola
Página 4
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
: CAR
2. CAR
FUNCION
NUMERO DE ARGUMENTOS : 1
ARGUMENTOS
RETORNA
EJEMPLOS
OPERACIÓN
(CAR(QUOTE((ESTA) ES UNA
PRUEBA)))
(CAR(QUOTE((ESTA ES UNA
PRUEBA))))
(CAR (QUOTE(()(ESTA ES UNA
PRUEBA))))
(CAR(QUOTE (ESTA ES UNA
PRUEBA)))
: Lista no vacía.
: El primer término de la lista.
RESULTADO
(ESTA)
(ESTA ES UNA PRUEBA)
()
(ESTA ES UNA PRUEBA)
Un error común que se comete es algo como lo siguiente:
CAR ((ESTO ES)(UN ERROR))
El primer paréntesis es para indicar que se
incluirá el argumento de CAR, lo que no identifica a una lista, luego, en
el argumento van dos listas en vez de una, que serían ESTO ES y UN ERROR.
Esto se corrige haciendo la llamada:
CAR(((ESTO NO ES)(UN ERROR)))
Generalizando tenemos que cualquier comando que trabaje con
una o más listas como argumento debe encerrarlas entre paréntesis, no así
con los átomos (ver la aplicación del comando QUOTE).
3. CDR
FUNCION
NUMERO DE ARGUMENTOS : 1
ARGUMENTOS
RETORNA
: CDR
: Lista no vacía.
: El resto de la lista que queda
después de borrar el primer
término.
RESULTADO
EJEMPLOS
OPERACIÓN
(CDR(QUOTE(ESTA ES UNA PRUEBA))) (ES UNA PRUEBA)
(CDR(QUOTE((ESTA ES)UNA
PRUEBA)))
(CDR(QUOTE((ESTA ES UNA
PRUEBA))))
(CDR(QUOTE(()(ESTA ES UNA
PRUEBA))))
(UNA PRUEBA)
()
((ESTA ES UNA PRUEBA))
Las restricciones para CDR son iguales que para CAR.
Rola
Página 5
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
4. CONS
FUNCION
NUMERO DE ARGUMENTOS : 2
ARGUMENTOS
: CONS
: 1. Cualquier término; 2. Una
RETORNA
Lista cualquiera.
: Una lista, tal que su CAR es el
primer argumento, y su CDR es
el segundo argumento.
ES)QUOTE(UNA
RESULTADO
((ESTA ES)UNA PRUEBA)
(ESTA)
: Dos términos.
: T si ambos átomos son iguales;
NIL en otro caso.
EJEMPLOS
OPERACIÓN
EQ(HOLA HOLA)
EQ(HOLA B)
(EQ(QUOTE HOLA)(QUOTE HOLA))
(EQ(QUOTE G)(QUOTE HOLA))
RESULTADO
T
NIL
T
NIL
Rola
Página 6
EJEMPLOS
OPERACIÓN
(CONS(QUOTE(ESTA
PRUEBA)))
(CONS(QUOTE ESTA)(QUOTE()))
5. ATOM
FUNCION
NUMERO DE ARGUMENTOS : 1
ARGUMENTOS
RETORNA
: ATOM
EJEMPLOS
OPERACIÓN
(ATOM(QUOTE ABC54))
(ATOM(QUOTE(UN EJEMPLO)))
ATOM(ABC54)
ATOM(ESTO ES UN EJEMPLO)
6. EQ
FUNCION
NUMERO DE ARGUMENTOS : 2
ARGUMENTOS
RETORNA
: EQ
: Cualquier término.
: T si el argumento es un átomo;
NIL en otro caso.
RESULTADO
T
NIL
T
NIL
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
7. NULL
FUNCION
NUMERO DE ARGUMENTOS : 1
ARGUMENTOS
RETORNA
: NULL
: Cualquier término.
: T si el argumento es una lista
vacía [()]; NIL en otro caso.
EJEMPLOS
OPERACIÓN
NULL(())
NULL((()))
NULL(ESTA ES UNA PRUEBA)
(NULL(QUOTE()))
RESULTADO
T
NIL
NIL
T
Rola
Página 7
Manual de Referencia Rápida de LISP
Rolando Burgos Cárdenas
http://www.ing.udec.cl/~rburgosc/ e-mail:
[email protected]
ESCRITURA DE PROGRAMAS EN LISP
Un
normalmente
interpretativa e interactivamente. En su forma más sencilla, un programa
o una función se representa como una expresión completamente puesta
entre paréntesis con todos los operadores en la forma prefija. Todas las
variables tienen valores átomos o listas.
programa
ejecuta
en
LISP
se
El programa que se muestra a continuación es un
programa en LISP que calcula y visualiza la media de una lista de números
de entrada. (Aunque este problema concreto es la antítesis de los
problemas a los que se aplica normalmente el LISP, lo usaremos para
ilustrar la sintaxis y desarrollar una base para la enseñanza del
lenguaje.) Por ejemplo, si la entrada es la lista:
(85.5 87.5 89.5 91.5)
Entonces el resultado presentado será el valor 88.5. La varia
Comentarios de: Manual de Referencia Rápida de LISP (0)
No hay comentarios