Lisp
Por Adolfo Jimenez
Historia
John McCarthy inventó
el LISP en 1958, poco
después del desarrollo
de FORTRAN. Fue
implementado por
primera vez por Steve
Russell en una
computadora IBM 704.
Historia
Es especialmente
adecuado para los
programas de
Inteligencia Artificial,
ya que procesa la
información
simbólica de
manera efectiva.
Características de Common Lisp
Es independiente de la máquina.
Utiliza metodología de diseño iterativo, y
fácil extensibilidad.
Permite actualizar los programas
dinámicamente.
Proporciona depuración de alto nivel.
Características de Common Lisp
Proporciona programación avanzada
orientada a objetos.
Proporciona un sistema macro
conveniente.
Proporciona una gran variedad de tipos
de datos, como objetos, estructuras, listas,
vectores, matrices ajustables, tablas hash
y símbolos.
Características de Common Lisp
Se basa en la expresión.
Proporciona un sistema de condiciones
orientado a objetos.
Proporciona una completa biblioteca de
E / S.
Proporciona extensas estructuras de
control.
Aplicaciones construidas en Lisp
Emacs
G2
AutoCad
Igor Engraver
Yahoo Store
Lisp: configuración del entorno
Se necesita un editor
El ejecutor Lisp.
Los archivos de origen para los programas
Lisp normalmente se nombran con la
extensión ".lisp".
Estructura Lisp
Las expresiones LISP son llamadas
expresiones simbólicas o s-expresiones.
Las s-expresiones están compuestas por
tres objetos válidos, átomos, listas y
cadenas.
Cualquier s-expresión es un programa
válido.
Estructura Lisp
Los programas LISP se ejecutan en un
intérprete o como código compilado.
El interprete lee el código del programa,
lo evalúa e imprime los valores devueltos
por el programa.
Un simple programa
Se tiene una s-expresión para encontrar la
suma de los tres números 7, 9 y 11.
Para hacer esto, podemos escribir en el
indicador del intérprete.
Notación de prefijo
Es posible que haya notado que LISP usa
la notación de prefijo.
En el programa anterior, el símbolo +
funciona como el nombre de la función
para el proceso de suma de los números.
En la notación de prefijo, los operadores
se escriben antes que sus operandos. Por
ejemplo, la expresión,
Notación de prefijo
Por ejemplo, la expresión:
Puede ser escrito como:
Notación de prefijo
Convertir la siguiente expresión
matemáticas a código Lisp:
Mensaje de texto
Imprimiendo Hola mundo:
Lisp: Sintaxis básica
Los programas Lisp se componen de tres
bloques básicos:
Atomos
Listas
String
Átomo
Un átomo es un número o una cadena
de caracteres contiguos.
Incluye números y caracteres especiales.
Los siguientes son ejemplos de algunos
átomos válidos:
Nombre, 1212234, hola-mundo, *hola*
Bloque#300, etc.
Listas
Una lista es una secuencia de átomos y/o
otras listas encerradas entre paréntesis.
Los siguientes son ejemplos de algunas
listas válidos:
(yo soy una lista)
(a (a b c) d e fgh)
(lunes martes miercoles)
()
String
Un string es un grupo de caracteres entre
comillas dobles.
Los siguientes son ejemplos de algunas
string válidos:
“yo soy una lista”
" a (a b c) d e fgh"
" lunes martes miércoles"
Usando un simple apóstrofe
LISP evalúa todo, incluidos los argumentos
de la función y los miembros de la lista.
A veces, necesitamos tomar átomos o
listas literalmente y no queremos que sean
evaluados o tratados como llamadas de
función.
Usando un simple apóstrofe
Para hacer esto, debemos preceder al
átomo o la lista con una comilla simple.
Vea el siguiente ejemplo:
Tipos de datos
Tipos escalares: por ejemplo, números,
caracteres, símbolos, etc.
Estructuras de datos: por ejemplo, listas,
vectores, vectores de bits y cadenas.
Tipos de datos
Cualquier variable puede tomar cualquier
objeto LISP como su valor, a menos que lo
haya declarado explícitamente.
Los tipos de datos se organizan en una
jerarquía. Un tipo de datos es un conjunto
de objetos LISP y muchos objetos pueden
pertenecer a uno de ellos.
Tipos de datos definidos por el sistema
..
Operadores
Aritméticas
De comparación
Lógicas
Bit a bit
Operadores aritméticos
Si A=10, B=30
+:
(+ A B) 40
-, *, /
mod, rem: módulo y resto después de una
división: (mod B A)0
Operadores aritméticos
incf: incrementa el valor entero por el
segundo argumento especificado.
(incf A 3)13
decf: decrementa el valor entero por el
segundo argumento especificado.
(decf A 4)9
Operadores de comparación
Si : A = 10 y B = 20
=: (= A B) no es verdad
>: (> A B) no es verdad
<: (< A B) es verdad
<=: (<= A B) es verdad
>=: (>= A B) no es verdad
/=: (/= A B) es verdad
(verifica si son diferentes o no. Si no son iguales devuelve verdad)
Operadores lógicos
Si : A es nill y B = 5
(and A B) return NIL
(or A B) return 5
(not A) return True
Operadores bit a bit
Las tablas de verdad para las
operaciones bit a bit y, o, y xor son las
siguientes:
Operadores bit a bit
Si A=60; B=13; en binario sería:
A = 0011 1100
B = 0000 1101
-------------------------------
A and B = 0000 1100
A or B = 0011 1101
A xor B = 0011 0001
Operadores bit a bit
En Lisp tendríamos:
(logand a b) 12
(logior a b) 61
(logxor a b) 49
Condicionales
1. cond. Se usa para Sintaxis
verificar múltiples testcomparación
cláusulas. Puede
compararse con las
declaraciones if
anidadas en otros
lenguajes de
programación.
Condicionales
Ejemplo COND
El valor de “t" (circulo en rojo) es como
el ELSE en un lenguaje de
programación.
Condicionales
2. if. Si la cláusula de Sintaxis
prueba es verdadero
se ejecuta las
acciones, caso
contrario, se evalúa
la cláusula
consiguiente.
Condicionales
Ejemplo IF
Si la cláusula de prueba se evalúa a
verdadero, se muestra el mensaje.
Condicionales
Ejemplo IF – THEN - ELSE
Si se desea
ejecutar varias
acciones tanto
en el THEN
como en el
ELSE, se usa la
función progn.
Condicionales
3. when. Si la Sintaxis
cláusula de prueba
se evalúa como
verdadera, la acción
de prueba se
ejecuta de lo
contrario, se evalúa
la cláusula
consiguiente.
Condicionales
Ejemplo WHEN
Es semejante a
una instrucción
IF – THEN, sin
ELSE.
Condicionales
4. case. Implementa
múltiples cláusulas de
prueba-acción como
cond. Sin embargo,
evalúa un formulario
clave y permite múltiples
cláusulas de acción
basadas en la evaluación
de ese formulario clave.
Condicionales
Ejemplo CASE
..
Iteraciones
loop
loop for
do
dotimes
dolist
LOOP
En su forma más simple, le permite
ejecutar algunas declaraciones hasta
que encuentra una declaración de
retorno (return).
LOOP
Ejemplo
Mostrar los primeros 10 números.
LOOP FOR
Similar a otros lenguajes de
programación.
Sintaxis:
LOOP FOR
Ejemplo
..
LOOP FOR
Ejemplo
La función evenp determina si un número
es par.
La función oddp determina si un número
es impar.
LOOP FOR
Ejercicio a resolver
Muestre todos los números pares entre
dos valores dados.
Funciones
La macro para definir una función es
defun.
Contiene:
Nombre de la función
Parámetros
Cuerpo de la función
Funciones
Ejemplo
Implementar una función que muestre el
promedio de cuatro números tomados
como parámetros.
Arreglos
LISP Permite definir arreglos de una o
múltiples dimensiones utilizando la función
make-array.
Creación de un arreglo con 10 celdas:
Acceder al último contenido:
Arreglos
Ejemplo
setf: establece el valor de una variable.
(setf h 3)