LISP. El Lisp fue inventado por John McCarthy en 1958 mientras estaba en el Instituto Tecnolgico de Massachusetts (MIT). McCarthy public su diseo en 1960 en un artculo de Communications of the ACM titulado "funciones recurrentes de expresiones simblicas y su cmputo por la mquina, parte I" (la "parte II" nunca fue publicada). All mostr que con algunos operadores simples y una notacin para las funciones, uno puede construir un lenguaje turing completo para los algoritmos. Desde 1955 1956, el Information Processing Language fue el primer lenguaje de AI, y ya haba incluido muchos de los conceptos, tales como proceso por lista y recurrencia, que vinieron a ser usados en el Lisp. La notacin original de McCarthy usaba "expresiones M" en corchetes que seran traducidas a expresiones S. Como un ejemplo, la expresin M car[cons[A,B]] es equivalente a la expresin S (car (cons A B)). Una vez el Lisp fue implementado, los programadores rpidamente eligieron usar expresiones S, y las expresiones M fueron abandonadas. las expresiones M emergieron otra vez con los intentos efmeros del MLISP de Horace Enea y el CGOL de Vaughan Pratt. El Lisp fue implementado primero por Steve Russel en un computador IBM 704. Russell haba ledo el artculo de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la funcin eval del Lisp poda ser implementada en cdigo de mquina. El resultado fue un intrprete de Lisp funcional que poda ser usado para correr programas Lisp, o ms correctamente, "evaluar expresiones Lisp". Dos rutinas de lenguaje ensamblador para el IBM 704 se convirtieron en las operaciones primitivas para descomponer listas: car (contenido del registro de direccin) y cdr (contenido del registro del decremento). Los dialectos del Lisp todava usan el car y cdr (pronunciado /kr/ y /kdr/) para las operaciones que retornan el primer elemento y el resto de la lista respectivamente. El primer compilador completo de Lisp, escrito en Lisp, fue implementado en 1962 por Tim Hart y Mike Levin en el MIT.3 Este compilador introdujo el modelo Lisp de compilacin incremental, en el cual las funciones compiladas e interpretadas pueden entremezclarse libremente. El lenguaje en los memos de Hart y Levin es mucho ms cercano al estilo moderno del Lisp que el anterior cdigo de McCarthy. Alumno: Casas Valdez Gustavo Adolfo Materia: Lenguajes de Programacin Grupo: 1 LISP Pgina 2
CARACTERISTICAS: El LISP es un lenguaje funcional que se apoya en la utilizacin de funciones matemticas para el control de los datos. Pero el elemento fundamental en el LISP es la lista. Y desde el punto de vista ms amplio del trmino. Cada funcin del LISP y cada programa que generemos con l vienen dado en forma de lista. Por esta razn los datos no se pueden diferenciarse sintcticamente de los programas. A este tipo de lenguaje se les denomina aplicativos o funcionales porque se basan en la aplicacin de funciones a los datos. El LISP diferencia dos tipos de elementos bsicos: El tomo, datos elementales de varios tipos como nmeros, smbolos, 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 ningn elemento. El LISP trata a los elementos o paramentos que le introducimos de manera no destructiva, de forma que la mayora de las funciones nos devuelven una lista que es el resultado de alguna transformacin de otra que recibi, pero sin cambiar a esta (la que recibi). Una de las razones por las que el LISP est especialmente dotado para la programacin en inteligencia artificial (IA), es precisamente, porque su cdigo 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 (smbolos) tomos numricos La estructura de datos bsica es la lista. Incluye primitivas para su manipulacin. Los comentarios comienzan por ; Los parmetros de funcin van todos por valor o por referencia segn la clasificacin de la funcin. LISP es interpretado y usa una estructura de gestin de almacenamiento en montculo con recoleccin de basura como almacenamiento primario para datos y programas.
VENTAJAS: Se puede razonar matemticamente. Su compatibilidad con todos los sistemas operativos. Que es multiparadigma. Programacin corta y sencilla.
DESVENTAJAS. La ejecucin de los programas es ms lenta, pues el intrprete tiene que gestionar la memoria y las pilas de recursin, cosa que lo hace bastante ms lento que los lenguajes estructurados. Cdigo difcil de comprender, sobretodo en programas de tamao considerable en grupo. Dificultad para depurarlo.
APLICACIONES: Desde su inicio, el Lisp estaba estrechamente relacionado con la comunidad de investigacin de la inteligencia artificial, especialmente en sistemas PDP-10. El Lisp fue usado como la implementacin del lenguaje de programacin Micro Planner que fue la fundacin para el famoso sistema de AI SHRDLU. En los aos 1970, a medida que la investigacin del AI engendr descendientes comerciales, el desempeo de los sistemas Lisp existentes se convirti en un problema creciente. El Lisp era un sistema difcil de implementar con las tcnicas de compilador y hardware comn de los aos 1970. Las rutinas de recoleccin de basura, desarrolladas por el entonces estudiante graduado del MIT, Daniel Edwards, hicieron prctico correr Lisp en sistemas de computacin de propsito general, pero la eficacia todava segua siendo un problema. Esto llev a la creacin de las mquinas Lisp: hardware dedicado para correr ambientes y programas Lisp. En 1994, la ANSI public el estndar del Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp". En aquel momento el mercado mundial para el Lisp era mucho ms pequeo de lo que es hoy. EJEMPLO: CASOS DE TRABAJAR CON LISTAS. Definicin de la funcin:
(defun vacia (l) (cond ((null l) 1) ; si la lista esta vacia devuelve 1 (t 0))) ; en otro caso (lista llena) devuelve 0
Llamada a la funcin:
(vacia '(1 3 4)) ; La lista no esta vacia, devolvera 0 (vacia '()) ; La lista esta vacia, devolvera 1