Lisp

Lenguaje de programación LISP
Información sobre la plantilla
LISP.png
Concepto:Es un lenguaje de programación aplicativo o funcional, de propósito general, se basa en la aplicación de funciones a los datos y se apoya en la utilización de funciones matemáticas para el control de los mismos. El nombre proviene del término “List Processing ”.LISP es muy utilizado en la Inteligencia Artificial.

Lenguaje de programación LISP. Es un lenguaje de programación aplicativo o funcional, de propósito general, se basa en la aplicación de funciones a los datos y se apoya en la utilización de funciones matemáticas para el control de los mismos. El elemento fundamental en el LISP es la lista, más ampliamente el término. Cada función del LISP y cada programa que generemos con él vienen dado en forma de lista.

El nombre proviene del término “List Processing ”. LISP es muy utilizado en la Inteligencia Artificial.

Historia

El LISP es un lenguaje de programación creado por el profesor John McCarthy a finales de los años 50. John McCarthy quiso desarrollar un lenguaje que mostrara la información estructurada en listas en las que se pudieran gestionar esta. De ahí el nombre que le dio a este lenguaje, LISP (List-Processing), porque fue creado principalmente para el procesamiento de listas.

Con el transcurso del tiempo el LISP dio origen a varios dialectos. Entre los más importantes podemos citar a: el MACLISP, COMMONLISP, INTERLISP, ZETALISP, etc. De todos ellos el COMMONLISP se esta consolidando como el estándar. Del LISP posteriormente surgió otro lenguaje de programación importante como es el Logo.

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 Enuncio una lista de alrededor de 24 nuevas ideas para lenguajes de programación.

El LISP es entendido como el modelo de un lenguaje de programación funcional hoy. Hay gente quien cree que allí una vez, era un diseño de lenguaje limpio "puro" en la dirección de lo funcional que fue comprendida por los programadores de Inteligencia Artificial en busca de la eficacia. Esta vista (opinión) no tiene en cuenta, que alrededor del final de los años cincuenta, nadie, incluyendo a McCarthy, seriamente basaba sus programas sobre el concepto de función matemática. Es casi seguro que McCarthy durante mucho tiempo estuvo programando con el diseño "de algoritmos" graduales ejecutados.

Características del Lenguaje

El LISP es un lenguaje funcional que se apoya en la utilización de funciones matemáticas para el control de los datos. Pero el elemento fundamental en el LISP es la lista. Y desde el punto de vista más amplio del término. Cada función del LISP y cada programa que generemos con él vienen dado en forma de lista. Por esta razón los datos no se pueden diferenciarse sintácticamente de los programas.

A este tipo de lenguaje se les denomina aplicativos o funcionales porque se basan en la aplicación de funciones a los datos. El LISP diferencia dos tipos de elementos básicos: El átomo, datos elementales de varios tipos como números, símbolos, caracteres y cadenas de caracteres. Y las Listas, entre las que podemos nombrar a un en especial. La lista “nil”, que es una lista nula que no tiene ningún elemento.

El LISP trata a los elementos o paramentos que le introducimos de manera no destructiva, de forma que la mayoría de las funciones nos devuelven una lista que es el resultado de alguna transformación de otra que recibió, pero sin cambiar a esta (la que recibió).

Una de las razones por las que el LISP esta especialmente dotado para la programación en inteligencia artificial (IA), es precisamente, porque su código y todos los datos tienen la misma estructura, en forma de lista. El LISP fue uno de los primeros lenguajes en manejar las excepciones con los comandos catch y throw.

Lisp es 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.

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úsculas o minúsculas para identificadores.

Tipos de datos estructurados: 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.

Control de secuencia

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.

Expresiones: Condicional Operaciones sobre átomos (en preorden): +, -, *, / Operaciones sobre listas: cons, car, cdr, list, replace, null, equal. Operaciones sobre propiedades: put, get. Enunciados: prog() para ejecución secuencial. Entrada y salida: open(), read(), print(). Definición de funciones: defun, define.

Gestión de subprogramas

Cuenta con tres clases de funciones: Función interpretada, en forma de estructura de listas. Primitivas eval. y apply. Función compilada, compiladas en un bloque de código máquina que puede ser ejecutado por el intérprete del hardware. Macro, se declara con define. Es simplemente una función ordinaria en LISP. Puede ser interpretada y compilada.

Gestión de almacenamiento

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. Entorno de referencia: Local, es el que se da en las listas, como asociaciones de átomos relacionados de una determinada manera. 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. Paso de parámetros: Transmisión por valor, consiste en evaluar las expresiones de una lista de parámetros y transmitir los valores resultantes. Transmisión por nombre, transmitir las expresiones de la lista de parámetros sin evaluar, y dejar que la función llamada los evalué usando eval. En funciones macro la transmisión por nombre es la norma. Para funciones lambda se puede especificar la transmisión por nombre usando lambda, en lugar de lambda.

Predicados

Los Predicados en Lisp son:

  • 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 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 una lista formada por x e y.
  • list x y z, devuelve la lista (x y z).
  • quote x, no se evalúa x.

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.

Evaluación del lenguaje

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 más a lo cientifico (Inteligencia Artificial)y se deriva de FORTRAN y su estructura se maneja de un lista inicio o final (cabeza cola)

Abstracción y encapsulamiento

LISP, en origen, no incluye características de abstracción de datos.

CLOS fue una ampliación de LISP con orientación de objetos.

Características:

  • Herencia múltiple.
  • Funciones genérica.
  • Metaclases y metaobjetos.
  • Técnica de creación e inicialización de objetos que permite control del proceso por parte del usuario.

Compiladores de Lisp

  • Steel Bank Common Lisp, (Creado a partir de CMU Common Lisp, es un software libre con énfasis en proveer facilidades para su mantenimiento. )

Glosario

MIT: Es el acrónimo de Massachusetts Institute of Technology (Instituto Tecnológico de Massachusetts), una de las principales instituciones dedicadas a la ciencia, la ingeniería y la investigación. Está situado en los Estados Unidos y se dedica a la docencia y a la investigación. Cuenta con numerosos premios Nobel.

Fuentes

Vea además