Post on 26-May-2015
description
transcript
Alrededor de 1956 McCarthy entendió el papel central de un lenguaje de
programación para su objetivo científico - la inteligencia artificial.
Un trabajo consultor en 1957 le permitió experimentar con una combinación de
notación algebraica (como esto es usado en el lenguaje FORTRAN para describir el
cómputo aritmético).
El experimento era acertado y la idea se hizo para él una base de pensamiento.
Él analizó lenguajes de programación existentes más profundamente (usando el
lenguaje FORTRAN como el modelo) y comenzó a pedir el nuevo medio de expresión.
Antes de septiembre de 1958, McCarthy había propuesto crear una nueva Lengua
Internacional Algorítmica
Características Interactivo (usualmente)
Los datos en LISP son muy restringidos:
Átomos literales (símbolos)
Átomos numéricos
La estructura de datos básica es la lista. Incluye primitivas para su
manipulación.
Los comentarios comienzan por ‘;’
Los parámetros de función van todos por valor o por referencia según la
clasificación de la función.
LISP es interpretado y usa una estructura de gestión de almacenamiento en
montículo con recolección de basura como almacenamiento primario para datos
y programas.
Estructura/Objetos de datos
Tipos de datos primitivos: átomos. Cada átomo tiene una lista de
propiedades asociada, accesible a través del puntero que almacena el nombre
del átomo.
No se distinguen may-min para identificadores.
Tipos de datos estructurado: listas. Tienen asociado un puntero al primer
elemento (car) y otro al elemento siguiente (cdr). Una lista vacía apunta a nil.
Para la asignación se utiliza setq(x val). Representación y almacenamiento.
Cada descriptor de un objeto de datos proporciona tipo y atributos.
En los datos estructurados (listas) se tienen sólo punteros a primero y a
siguiente.
El traductor LISP es una función read() que toma el fuente del fichero y lo interpreta.
La ejecución del programa consiste en la evaluación de las funciones contenidas en
el mismo.
Operaciones sobre átomos (en preorden): +, -, *, /
Operaciones sobre listas: cons, car, cdr, list, replace, null, equal.
Entrada y salida: open(), read(), print().
Definición de funciones: defun, define.
Estructura/Control de secuencia
• Tres clases de funciones:
1. Función interpretada, en forma de estructura de listas. Primitivas
eval y apply.
2. Función compilada, compiladas en un bloque de código máquina
que puede ser ejecutado por el interprete del hardware.
3. Macro, se declara con define. Es simplemente una función
ordinaria en LISP. Puede ser interpretada y compilada.
Estructura/ Gestión de subprogramas
o La memoria se estructura en forma de montículo, que
maneja unidades de una palabra de tamaño fijo usando
una lista de espacios libres y un recolector de basura.
o Entorno de referencia:
1. Local, es el que se da en las listas, como asociaciones
de átomos relacionados de una determinada manera.
2. Global o común, se consigue mediante asociación de
un átomo con una propiedad del mismo que contiene
un puntero al datos referenciado. Se usa set y setq.
Estructura/Gestión de almacenamiento
• Paso de parámetros:
1. Transmisión por valor, consiste en evaluar las
expresiones de una lista de parámetros y transmitir los
valores resultantes.
2. Transmisión por nombre, transmitir las expresiones de la
lista de parámetros sin evaluar, y dejar que la función
llamada los evalue usando eval.
Estructura/Gestión de almacenamiento
Funciones en Lisp
Funciones normales, son las que se suelen incluir en las
implementaciones de LISP
Funciones de lista, para manipulación de listas:
– car L, devuelve el primer elemento de L.
– cdr L, devuelve la cola (lista - primero).
– cons x y, devuelve uan lista formada por x e y.
– list x y z, devuelve la lista (x y z).
– quote x, no se evalúa x.
• Predicados – atom x, devuelve True si x es un átomo. – numberp x, devuelve True si x es un número. – greaterp x y, devuelve True si x>y. – lessp x y, devuelve True si x<y. – null x, devuelve True si x es nulo. – and x y, devuelve x and y. – or x y, devuelve x or y. – not x, devuelve not x. – eq x y, devuelve True si x=y.
• Funciones aritméticas: – +, -, *, y /. – rem x y, devuelve el módulo x/y (remainder).
• Funciones de entrada y salida
– load nombrearchivo, lee el archivo a memoria.
– print x, imprime el elemento x.
– open nombrearchivo, abre un archivo y devuelve una puntero al mismo.
– read, lee del terminal un átomo.
– help, proporciona ayuda.
– trace, traza la función.
– bye, termina LISP.
EJEMPLO DEL LENGUAJE LISP
EJEMPLO DEL LENGUAJE LISP
CONCLUSION
LISP ha evolucionado durante más de 30 años y
desarrollado para inteligencia artificial, pero no es
adecuado para aplicaciones convencionales.
Las versiones compiladas son algo más eficientes.
Es un lenguaje muy estricto poco convencional en el
sentido comercial. Se frecuenta mas a lo científico
(Inteligencia Artificial)y se deriva de Fortran y su estructura
se maneja de un lista inicio o final (cabeza cola)