Lisp De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda Lisp Informacin general Paradigma multiparadigma: orientado a objetos, funcional,
declarativo 1958 John McCarthy fuerte, dinmico
Apareci en Diseado por Tipo de dato
Implementaciones mltiples Dialectos Common Lisp, Scheme, Emacs Lisp Smalltalk, CLOS, Dylan, Perl
Ha influido a
El Lisp (o LISP) es una familia de lenguajes de programacin de computadora de tipo multiparadigma con una larga historia y una sintaxis completamente entre parntesis. Especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnolgico de Massachusetts, el Lisp es el segundo ms viejo lenguaje de programacin de alto nivel de extenso uso hoy en da; solamente el FORTRAN es ms viejo. Al igual que el FORTRAN, el Lisp ha cambiado mucho desde sus comienzos, y han existido un nmero de dialectos en su historia. Hoy, los dialectos Lisp de propsito general ms ampliamente conocidos son el Common Lisp y el Scheme.
El Lisp fue creado originalmente como una notacin matemtica prctica para los programas de computadora, basada en el clculo lambda de Alonzo Church. Se convirti rpidamente en el lenguaje de programacin favorito en la investigacin de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programacin, el Lisp fue pionero en muchas ideas en ciencias de la computacin, incluyendo las estructuras de datos de rbol, el manejo de almacenamiento automtico, tipos dinmicos, y el compilador auto contenido. El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el cdigo fuente del Lisp en s mismo est compuesto de listas. Como resultado, los programas de Lisp pueden manipular el cdigo fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programacin de dominio especfico empotrados en el Lisp. La intercambiabilidad del cdigo y los datos tambin da a Lisp su instantneamente reconocible sintaxis. Todo el cdigo del programa es escrito como expresiones S, o listas entre parntesis. Una llamada de funcin o una forma sintctica es escrita como una lista, con la funcin o el nombre del operador en primer lugar, y los argumentos a continuacin; por ejemplo, una funcin f que toma tres argumentos puede ser llamada usando (f x y z). Contenido [ocultar]
1 Historia o 1.1 Genealoga y variantes o 1.2 Relacin con la inteligencia artificial o 1.3 Desde el ao 2000 2 Dialectos importantes 3 Innovaciones del lenguaje 4 Listas 5 Orgenes de "car" y "cdr" 6 Ejemplos o 6.1 Hola mundo 6.1.1 Trabajando con listas o 6.2 Grandes valores de la Funcin de Ackermann 7 Referencias
8 Vase tambin 9 Enlaces externos o 9.1 Aplicaciones en Lisp o 9.2 Compiladores de Lisp
[editar] Historia 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 recursivas de expresiones simblicas y su cmputo por la mquina, parte I"1 (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 recursin, 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 MLISP2 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.3 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.4 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. [editar] Genealoga y variantes Sobre su historia de cincuenta aos, el Lisp ha producido muchas variaciones en el tema base de un lenguaje de expresin S. Por otra parte, cada dialecto dado puede tener varias implementaciones, por ejemplo, hay ms de una docena de implementaciones del Common Lisp. Las diferencias entre los dialectos pueden ser muy visibles, por ejemplo, el Common Lisp y el Scheme usan diferentes palabras clave para definir funciones. Dentro de un dialecto que est estandarizado, sin embargo, las implementaciones conformadas soportan el mismo lenguaje base, pero con diferentes extensiones y bibliotecas. [editar] Relacin con la inteligencia artificial Desde su inicio, el Lisp estaba estrechamente relacionado con la comunidad de investigacin de la inteligencia artificial, especialmente en sistemas PDP10.5 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. Avances tanto en el hardware de computadora como en la tecnologa de
compiladores pronto hicieron obsoletas a las mquinas de Lisp, en detrimento del mercado del Lisp. Durante los aos 1980 y 1990, fue hecho un gran esfuerzo para unificar los numerosos dialectos del Lisp en un solo lenguaje (ms notablemente, InterLisp, Maclisp, ZetaLisp, MetaLisp, y Franz Lisp). El nuevo lenguaje, Common Lisp, fue esencialmente un subconjunto compatible de los dialectos que reemplaz. 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.[cita requerida] [editar] Desde el ao 2000 Habiendo declinado algo en los aos 1990, Lisp experiment un nuevo crecimiento de inters. La mayor parte de la nueva actividad est enfocada alrededor de las implementaciones de fuente abierta del Common Lisp, e incluye el desarrollo aplicaciones y de nuevas bibliotecas porttiles. Este inters puede ser medido en parte por las ventas de la versin impresa de Practical Common Lisp (Common Lisp Prctico) de Peter Seibel, un tutorial para nuevos programadores Lisp publicado en 2004,6 que estuvo brevemente en [Link] como el segundo libro de programacin ms popular. El libro es accesible en lnea sin costo.7 Muchos nuevos programadores Lisp fueron inspirados por escritores como Paul Graham y Eric S. Raymond luchando por un lenguaje que otros consideran anticuado. Los nuevos programadores de Lisp frecuentemente describen el lenguaje como una experiencia que abre los ojos y una aclamacin de ser substancialmente ms productivo que otros lenguajes.8 Este aumento de conciencia puede ser contrastado con el "invierno de la inteligencia artificial" y el breve crecimiento del Lisp a mediados de los 1990.9 En su encuesta de las implementaciones del Common Lisp, Dan Weinreb lista once implementaciones activamente mantenidas. Scieneer Common Lisp es una nueva implementacin comercial que bifurc (fork) del CMUCL con un primer lanzamiento en 2002. La comunidad de la fuente abierta ha creado la nueva infraestructura de soporte: Cliki es un Wiki que recoge la informacin relacionada con el Common Lisp, el Common Lisp directory lista recursos, el #lisp es un canal
popular de IRC (con soporte por un Bot escrito en Lisp), lisppaste soporta la distribucin y el intercambio y comentario de retazos de cdigo (snippets), el Planet Lisp recoge el contenido de varios blogs relacionados con el Lisp, en el LispForum el usuario discute tpicos sobre Lisp, Lispjobs es un servicio para anunciar ofertas de trabajo y hay un nuevo servicio de noticias semanales (Weekly Lisp News). Han sido celebrados los 50 aos del Lisp (1958-2008) en LISP50@OOPSLA. Hay varias reuniones de usuario locales regulares (Boston, Vancouver, Hamburg,), Reuniones Lisp (European Common Lisp Meeting, European Lisp Symposium) y una International Lisp Conference. La comunidad Scheme mantiene activamente ms de veinte implementaciones. Se han desarrollado en los ltimos aos varias significativas nuevas implementaciones (Chicken, Gauche, Ikarus, Larceny, Ypsilon). El estndar de Scheme Revised5 Report on the Algorithmic Language Scheme fue ampliamente aceptado en la comunidad del Scheme. El proceso Scheme Requests for Implementation ha creado muchas bibliotecas y extensiones casi estndares para el Scheme. Las comunidades de usuario de implementaciones individuales del Scheme continan creciendo. En 2003 un nuevo proceso de estandarizacin del lenguaje fue comenzada y condujo al estndar R6RS del Scheme en 2007. El uso acadmico del Scheme para ensear ciencias de la computacin parece haber declinado algo. Algunas universidades ya no estn usando Scheme en sus cursos preliminares de ciencias de la computacin. Hay tambin algunos nuevos dialectos Lisp. Notablemente: Newlisp (un lenguaje de scripting), Arc (desarrollado por Paul Graham) y recientemente Clojure (desarrollado por Rich Hickey) y NU para la programacin con Cocoa de Apple. [editar] Dialectos importantes Los dos principales dialectos del Lisp usados para la programacin de propsitos generales hoy en da son Common Lisp y Scheme. Estos lenguajes representan opciones de diseo significativamente diferentes. El Common Lisp, descendiente principalmente de MacLisp, Interlisp, y Lisp Machine Lisp, es un superconjunto ampliado de los primeros dialectos del Lisp, con un estndar de lenguaje grande incluyendo muchos tipos de datos y formas sintcticas incorporados, as como un sistema del objeto. El Scheme es
un diseo ms minimalista, con un mucho ms pequeo conjunto de caractersticas estndar pero con ciertas caractersticas de implementacin (tales como optimizacin de llamada de cola y continuacin completa) no encontradas necesariamente en Common Lisp. El Common Lisp tambin tom prestadas ciertas caractersticas de Scheme tales como mbito de lxico y clausura lxica. El Scheme, es un dialecto del lenguaje Lisp con mbito esttico y cola recursiva autntica inventado por Guy Lewis Steele Jr. y Gerald Jay Sussman. Fue diseado para tener una semntica excepcionalmente clara y simple y pocas maneras diferentes de formar expresiones. Una amplia variedad de paradigmas programados encuentran una expresin conveniente en Scheme, incluyendo los estilos imperativo, funcional, y paso de mensajes. El Scheme contina evolucionando con una serie de los estndares (Revisedn Report on the Algorithmic Language Scheme) y una serie de Scheme Requests for Implementation. Adems, los dialectos del Lisp son usados como lenguajes de scripting en un nmero de aplicaciones, con los ms conocidos siendo el Emacs Lisp en el editor de Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity. [editar] Innovaciones del lenguaje El Lisp fue el primer lenguaje de programacin homoicnico: la representacin primaria del cdigo del programa es el mismo tipo de estructura de la lista que tambin es usada para las principales estructuras de datos. Como resultado, las funciones del Lisp pueden ser manipuladas, alteradas o an creadas dentro de un programa Lisp sin un extensivo anlisis sintctico (parsing) o manipulacin de cdigo de mquina binario. Esto generalmente es considerado una de las ventajas primarias del lenguaje con respecto a su poder expresivo, y hace al lenguaje favorable a la evaluacin metacircular. La ubicua estructura IF THEN ELSE, ahora admitida como un elemento esencial de cualquier lenguaje de programacin, fue inventada por McCarthy para el uso en el Lisp, donde vio su primera apariencia en una forma ms general (la estructura cond). Fue heredada por el ALGOL, que la populariz. El Lisp influenci profundamente a Alan Kay, el lder de investigacin del Smalltalk, y entonces a su vez Lisp fue influenciado por Smalltalk, adoptando
las caractersticas de la programacin orientada a objetos (clases, instancias, etc.) a finales de los aos 1970. En gran parte debido a sus requerimientos de recursos con respecto al temprano hardware computacional (incluyendo los primeros microprocesadores), el Lisp no se hizo tan popular fuera de la comunidad de AI, como lo fueron el FORTRAN y el descendiente del lenguaje ALGOL, el lenguaje C. Lenguajes ms nuevos como Java y Python han incorporado algunas versiones limitadas de algunas de las caractersticas del Lisp, pero no pueden necesariamente brindar la coherencia y la sinergia de los conceptos completos encontrados en el Lisp. Debido a su conveniencia para aplicaciones mal definidas, complejas, y dinmicas, el Lisp estn disfrutando actualmente de un cierto resurgimiento del inters popular. [editar] Listas El elemento fundamental en Lisp es la lista, en el sentido ms amplio del trmino, pues tanto los datos como los programas son listas. De ah viene su nombre, pues Lisp es un acrnimo de "LIStProcessing". Las listas en LISP estn delimitadas por parntesis. De aqu viene el chiste del significado de LISP: "LostInStupidParentheses" que aunque con buen humor es completamente ficticio. Algunas de las funciones predefinidas de Lisp tienen smbolos familiares (+ para la suma, * para el producto), pero otras son ms exticas, especialmente dos que sirven precisamente para manipular listas, descomponindolas en sus componentes. Sus nombres ("car" y "cdr") son un poco extraos, reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generacin, "car" devuelve la cabeza de una lista y "cdr" su cola o resto. Lisp sigue una filosofa de tratamiento no-destructivo de los parmetros, de modo que la mayora de las funciones devuelven una lista resultado de efectuar alguna transformacin sobre la que recibieron, pero sin alterar esta ltima. Uno de los motivos por los que Lisp es especialmente adecuado para la IA es el hecho de que el cdigo y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas segn las circunstancias.
Lisp fue uno de los primeros lenguajes de programacin en incluir manejo de excepciones con las primitivas catch y throw. Derivado del Lisp es el lenguaje de programacin Logo. Sin entrar en detalles, podra decirse que Logo es Lisp sin parntesis y con operadores aritmticos infijos. [editar] Orgenes de "car" y "cdr" - car: Content of Address part of Register - cdr: Content of Decremental part of Register Son operaciones del juego de instrucciones del IBM 704 [editar] Ejemplos [editar] Hola mundo (format t "Hola, mundo!") [editar] Trabajando con listas **************************************************** *************** Definicin de la funcin: (defun vacia (l) (cond ((null l) 1) devuelve 1 (t 0))) 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 **************************************************** *************** (defun ltimo (lista) ; si la lista esta vacia ; en otro caso (lista
(cond ((null (cdr lista)) (car lista)) (t (ltimo (cdr lista))))) (ltimo '(1 2 3 4 5 6 7)) la lista: 7 ; devuelve el ltimo de
**************************************************** *************** ; ---FACTORIAL---;Definicin matemtica ; Factorial(x) = 1 si x=0 caso base ; x*factorial(x-1) si x>0 caso recursivo ;Funcin factorial hecha con recursividad no final (defun factorial (n) (if (= 0 n) 1 ; caso base (* n (factorial (- n 1))))) ; caso recursivo (factorial 4) 24=4*3*2*1 ;esto nos devolvera
**************************************************** *************** [editar] Grandes valores de la Funcin de Ackermann ;Propuesta por Nikolai Coica (defun ackermann (m n) "The Ackermann Function" (cond ((= m 0) (+ n 1)) ((= m 1) (+ n 2)) ((= m 2) (+ 3 (* n 2))) ((= m 3) (+ 5 (* 8 (- (expt 2 n) 1)))) (t (cond ((= n 0) (ackermann (- m 1) 1))
(t (ackermann (- m 1) (ackermann m (- n 1)))))))) [editar] Referencias 1. John McCarthy. Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I. Consultado el 13-10-2006. 2. David Canfield Smith. MLISP Users Manual. Consultado el 13-102006. 3. According to what reported by Paul Graham in Hackers & Painters, p. 185, McCarthy said: "Steve Russell said, look, why don't I program this eval..., and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today..." 4. Tim Hart and Mike Levin. AI Memo 39-The new compiler. Consultado el 13-10-2006. 5. The 36-bit word size of the PDP-6/PDP-10 was influenced by the usefulness of having two Lisp 18-bit pointers in a single word. Lum [Link] History of TOPS or Life in the Fast ACs, 18 de octubre de 1990. The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal. 6. Practical Common Lisp going into 3rd printing 7. Practical Common Lisp 8. The Road To Lisp Survey. Consultado el 13-10-2006. 9. Trends for the Future [editar] Vase tambin
Inteligencia artificial Common Lisp Scheme Maxima
[editar] Enlaces externos
Wikilibros alberga un libro o manual sobre Programacin en LISP.
Features of Common Lisp Una discusin de algunas de las caractersticas ms sobresalientes del lenguaje. Desarrollo de Software en LISP Comunidad virtual para el intercambio de informacin en castellano sobre desarrollo de software en LISP para profesionales practicantes, docentes y estudiantes. Recursos Lisp en espaol Textos en espaol y traducciones sobre Lisp, Common Lisp, Emacs Lisp, etc. [Link] CLiki, el wiki de common lisp Generar pginas dinmicamente con Lisp y Apache, artculo de Rober Morales La expansin decimal de A(4,2) Practical Common Lisp Libro introductorio de Common Lisp. Versin on-line y distribuible por la propia editorial.
[editar] Aplicaciones en Lisp Entre las ms exitosas aplicaciones escritas en Lisp se pueden mencionar:
Emacs, el editor de texto [Link] ACL2, el demostrador de teoremas [Link] Maxima, el sistema de lgebra computacional [Link]
[editar] Compiladores de Lisp
GNU Common Lisp, software libre Allegro Common Lisp, software propietario CMU Common Lisp, software libre CLISP, Una implementacin de Common Lisp, software libre OpenMCL Common lisp para Macintosh, software libre Steel Bank Common Lisp, creado a partir de CMU Common Lisp, es un software libre con nfasis en proveer facilidades para su mantenimiento.
Obtenido de [Link] Categoras:
Lenguajes de programacin orientada a objetos Acrnimos de informtica
Historia del software
Categora oculta:
Wikipedia:Artculos con pasajes que requieren referencias
Herramientas personales
Iniciar sesin / crear cuenta
Espacios de nombres
Artculo Discusin
Variantes Vistas
Leer Editar Ver historial
Acciones Buscar
Especial:Buscar
Navegacin
Portada Portal de la comunidad Actualidad Cambios recientes Pginas nuevas Pgina aleatoria Ayuda Donaciones Notificar un error
Imprimir/exportar
Crear un libro Descargar como PDF Versin para imprimir
Herramientas
Lo que enlaza aqu Cambios en enlazadas Subir archivo Pginas especiales Enlace permanente Citar este artculo
Otros proyectos
Wikilibros
En otros idiomas
Aragons emaitka Bosanski Catal esky Cymraeg Dansk Deutsch English Esperanto Eesti Euskara Suomi Franais Gaeilge
Galego Hrvatski Magyar Italiano Lietuvi Latvieu Bahasa Melayu Nederlands o sk ( okm ) Polski Portugus Romn S pskoh vatski / Simple English S ovenina S ovenina Shqip / S pski Svenska Trke Esta pgina fue modificada por ltima vez el 6 sep 2011, a las 10:26. El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales. Lee los trminos de uso para ms informacin. Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro. Contacto
Poltica de privacidad Acerca de Wikipedia Limitacin de responsabilidad Versin para mviles