Diferencia entre revisiones de «Lisp»

Contenido eliminado Contenido añadido
Sin resumen de edición
Isha (discusión · contribs.)
m Revertidos los cambios de 150.244.66.12 a la última edición de Omerta-ve
Línea 12:
}}
 
El '''Lisp''' (o '''LISP''') es una familia de [[lenguaje de programación|lenguajes de programación]] de [[computadora]] de tipo [[Lenguaje de programación funcional|funcional]] con una larga historia y una sintaxis completamente entre paréntesis. Especificado originalmente en 1958 por [[John McCarthy]] y sus colaboradores en el [[MIT]], el Lisp es el segundo más viejo [[lenguaje de alto nivel|lenguaje de programación de alto nivel]] de extenso uso hoy en día; solamente el [[FORTRAN]] es más viejo. Al igual que el FORTRAN, el Lisp ha cambiado mucho desde sus comienzos, y han existido un número de [[dialecto (programación)|dialectos]] en su historia. Hoy, los dialectos Lisp de propósito general más ampliamente conocidos son el [[Common Lisp]] y el [[Scheme]].
funciones del Lisp pueden ser manipuladas, alteradas o aún creadas dentro de un programa Lisp sin un extensivo [[analizador sintáctico|análisis sintáctico]] (parsing) o manipulación de código de máquina 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 [[evaluación metacircular]].
 
El Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el [[cálculo lambda]] de [[Alonzo Church]]. Se convirtió rápidamente en el lenguaje de programación favorecido en la investigación de la [[inteligencia artificial]] (AI). Como uno de los primeros lenguajes de programación, el Lisp fue pionero en muchas ideas en [[ciencias de la computación]], incluyendo las [[estructura de datos|estructuras de datos]] de [[Árbol (estructura de datos)|árbol]], el [[Recolector de basura|manejo de almacenamiento automático]], [[Tipo de dato|tipos]] dinámicos, y el [[compilador]] [[auto contenido]].
 
El nombre LISP deriva del "'''LIS'''t '''P'''rocessing" (Proceso de LIStas). Las [[Lista (estructura de datos)|listas encadenadas]] son una de las estructuras de datos importantes del Lisp, y el [[código fuente]] del Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los [[macro (programación)|macro]] sistemas que permiten a los programadores crear una nueva sintaxis de [[lenguaje de programación de dominio específico|lenguajes de programación de dominio específico]] empotrados en el Lisp.
 
La intercambiabilidad del código y los datos también da a Lisp su instantáneamente reconocible sintaxis. Todo el código del programa es escrito como [[expresión S|expresiones S]], o listas entre paréntesis. Una llamada de función o una forma sintáctica es escrita como una lista, con la función o el nombre del operador en primer lugar, y los argumentos a continuación; por ejemplo, una función f que toma tres argumentos puede ser llamada usando <code>(f x y z)</code>.
 
== Historia ==
 
El Lisp fue inventado por [[John McCarthy]] en 1958 mientras estaba en el [[Instituto Tecnológico de Massachusetts]] (MIT). McCarthy publicó su diseño en 1960 en un papel de [[Communications of the ACM]] intitulado "funciones recursivas de expresiones simbólicas y su cómputo por la máquina, parte I"<ref name="MCCARTHY">{{cita web | título=Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I| autor=John McCarthy | url=http://www-formal.stanford.edu/jmc/recursive.html | fechaacceso=2006-10-13}}</ref> (la "parte II" nunca fue publicada). Allí mostró que con algunos operadores simples y una notación para las funciones, uno puede construir un lenguaje [[turing completo]] para los [[algoritmo]]s.
 
Desde 1955 ó 1956, el [[Information Processing Language]] fue el primer lenguaje de AI, y ya había incluido muchos de los conceptos, tales como proceso por lista y [[recursión]], que vinieron a ser usados en el Lisp.
 
La notación original de McCarthy usaba "[[expresión M|expresiones M]]" en corchetes que serían traducidas a [[expresión S|expresiones S]]. Como un ejemplo, la expresión M <CODE>car[cons[A,B]]</CODE> es equivalente a la expresión S <code>(car (cons A B))</code>. Una vez el Lisp fue implementado, los programadores rápidamente eligieron usar expresiones S, y las expresiones M fueron abandonadas. las expresiones M emergieron otra vez con los intentos efímeros del [[MLISP]]<ref name="SMITH">{{cita web | título=MLISP Users Manual| autor=David Canfield Smith | url=http://community.computerhistory.org/scc/projects/LISP/stanford/Smith-MLISP-AIM-84.pdf | fechaacceso=2006-10-13}}</ref> de [[Horace Enea]] y el [[CGOL]] de [[Vaughan Pratt]].
 
El Lisp fue implementado primero por [[Steve Russell]] en un computador [[IBM 704]]. Russell había leído el papel de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la función ''eval'' del Lisp podía ser implementada en [[código de máquina]].<ref> 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 [[Software bug|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..."</ref> El resultado fue un [[intérprete (informática)|intérprete]] de Lisp funcional que podía ser usado para correr programas Lisp, o más correctamente, "evaluar expresiones Lisp".
 
Dos rutinas de [[lenguaje ensamblador]] para el [[IBM 704]] se convirtieron en las operaciones primitivas para descomponer listas: [[CAR y CDR|car]] (contenido del registro de dirección) y cdr (contenido del registro del decremento). Los dialectos del Lisp todavía usan el car y cdr ({{pronEng|ˈkɑr}} y {{IPA|/ˈkʊdər/}}) 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.<ref name="LEVIN">{{cita web | título=AI Memo 39-The new compiler| autor=Tim Hart and Mike Levin | url=ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf | fechaacceso=2006-10-13}}</ref> Este compilador introdujo el modelo Lisp de compilación incremental, en el cual las funciones compiladas e interpretadas pueden entremezclarse libremente. El lenguaje en los memos de Hart y Levin es mucho más cercano al estilo moderno del Lisp que el anterior código de McCarthy.
 
=== Genealogía y variantes ===
 
Sobre su historia de cincuenta años, el Lisp ha producido muchas variaciones en el tema base de un lenguaje de expresión S. Por otra parte, cada dialecto dado puede tener varias implementaciones, por ejemplo, hay más 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.
 
=== Relación con la inteligencia artificial ===
 
Desde su inicio, el Lisp estaba estrechamente relacionado con la comunidad de investigación de la [[inteligencia artificial]], especialmente en sistemas [[PDP-10]].<ref>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. {{cita noticiagroup | cita = The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal. | url = http://groups.google.com/group/alt.folklore.computers/browse_thread/thread/6e5602ce733d0ec/17597705ae289112 | título = The History of TOPS or Life in the Fast ACs | newsgroup = alt.folklore.computers | id = 84950@tut.cis.ohio-state.edu | fecha = 18 October 1990 | autor = Lum Johnson}}</ref> El Lisp fue usado como la implementación del lenguaje de programación [[Planner|Micro Planner]] que fue la fundación para el famoso sistema de AI [[SHRDLU]]. En los años 1970, a medida que la investigación del AI engendró descendientes comerciales, el desempeño de los sistemas Lisp existentes se convirtió en un problema creciente.
 
El Lisp era un sistema difícil de implementar con las técnicas de compilador y hardware común de los años 1970. Las rutinas de [[recolección de basura]], desarrolladas por el entonces estudiante graduado del MIT, Daniel Edwards, hicieron práctico correr Lisp en sistemas de computación de propósito general, pero la eficacia todavía seguía siendo un problema. Esto llevó a la creación de las [[máquina Lisp|máquinas Lisp]]: hardware dedicado para correr ambientes y programas Lisp. Avances tanto en el hardware de computadora como en la tecnología de compiladores pronto hicieron obsoletas a las máquinas de Lisp, en detrimento del mercado del Lisp.
 
Durante los años 1980 y 1990, fue hecho un gran esfuerzo para unificar los numerosos dialectos del Lisp en un solo lenguaje (más 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 estándar del Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp". En aquel momento el mercado mundial para el Lisp era mucho más pequeño de lo que es hoy.{{fact|date=March 2009}}
 
=== Desde el año 2000 ===
 
Habiendo declinado algo en los años 1990, Lisp experimentó un nuevo crecimiento de interés. 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 portables. Este interés puede ser medido en parte por las ventas de la versión impresa de [[Practical Common Lisp]] (Common Lisp Práctico) de [[Peter Seibel]], un tutorial para nuevos programadores Lisp publicado en 2004,<ref>[http://gigamonkeys.com/blog/2007/05/26/pcl-third-printing.html Practical Common Lisp going into 3rd printing]</ref> que estuvo brevemente en [[Amazon.com]] como el segundo libro de programación más popular. El libro es accesible en línea sin costo.<ref>[http://gigamonkeys.com/book/ Practical Common Lisp]</ref>
 
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 aclamación de ser substancialmente más productivo que otros lenguajes.<ref>{{cita web | título=The Road To Lisp Survey | url=http://wiki.alu.org/The_Road_To_Lisp_Survey | fechaacceso=2006-10-13}}</ref> 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.<ref>[http://www.faqs.org/docs/artu/ch14s05.html Trends for the Future]</ref>
 
En su encuesta de las implementaciones del Common Lisp, Dan Weinreb lista once implementaciones activamente mantenidas. Scieneer Common Lisp es una nueva implementación 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 información relacionada con el Common Lisp, el [http://www.cl-user.net/ Common Lisp directory] lista recursos, el #lisp es un canal popular de IRC (con soporte por un Bot escrito en Lisp), [http://paste.lisp.org/ lisppaste] soporta la distribución y el intercambio y comentario de retazos de código (snippets), el [http://planet.lisp.org/ Planet Lisp] recoge el contenido de varios blogs relacionados con el Lisp, en el [http://www.lispforum.com/ LispForum] el usuario discute tópicos sobre Lisp, [http://lispjobs.wordpress.com/ Lispjobs] es un servicio para anunciar ofertas de trabajo y hay un nuevo servicio de noticias semanales ([http://lispnews.wordpress.com/ Weekly Lisp News]).
 
Han sido celebrados los 50 años del Lisp (1958-2008) en [http://www.lisp50.org/ LISP50@OOPSLA]. Hay varias reuniones de usuario locales regulares (Boston, Vancouver, [http://lisp-hh.de/wiki/Stammtisch Hamburg],…), Reuniones Lisp ([http://www.weitz.de/eclm2009/ European Common Lisp Meeting], [http://european-lisp-symposium.org/, European Lisp Symposium]) y una [http://www.international-lisp-conference.org/ International Lisp Conference].
 
La comunidad Scheme mantiene activamente más de veinte implementaciones. Se han desarrollado en los últimos años varias significativas nuevas implementaciones (Chicken, Gauche, Ikarus, Larceny, Ypsilon). El estándar de Scheme [http://www.schemers.org/Documents/Standards/R5RS/ Revised<sup>5</sup> 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 estandares para el Scheme. Las comunidades de usuario de implementaciones individuales del Scheme continúan creciendo. En 2003 un nuevo proceso de estandarización del lenguaje fue comenzada y condujo al estándar R<sup>6</sup>RS del Scheme en 2007. El uso académico del Scheme para enseñar ciencias de la computación parece haber declinado algo. Algunas universidades ya no están usando Scheme en sus cursos preliminares de ciencias de la computación.
 
Hay también algunos nuevos dialectos Lisp. Notablemente: [[Newlisp]] (un lenguaje de scripting), Arc (desarrollado por Paul Graham) y recientemente [[Clojure]] (desarrollado por Hickey Rich) y NU para la programación con Cocoa de Apple.
 
== Dialectos importantes ==
 
Los dos principales dialectos del Lisp usados para la programación de propósitos generales hoy en día son [[Common Lisp]] y [[Scheme]]. Estos lenguajes representan opciones de diseño 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 estándar de lenguaje grande incluyendo muchos tipos de datos y formas sintácticas incorporados, así como un sistema del objeto. El Scheme es un diseño más minimalista, con un mucho más pequeño conjunto de características estándar pero con ciertas características de implementación (tales como [[optimización de llamada de cola]] y [[continuación]] completa) no encontradas necesariamente en Common Lisp. El Common Lisp también tomó prestadas ciertas características de Scheme tales como [[ámbito de léxico]] y [[Clausura (informática)|clausura]] léxica.
 
El [[Scheme]], es un dialecto del lenguaje Lisp con ámbito estático y cola recursiva auténtica inventado por [[Guy Lewis Steele Jr.]] y [[Gerald Jay Sussman]]. Fue diseñado para tener una semántica excepcionalmente clara y simple y pocas maneras diferentes de formar expresiones. Una amplia variedad de paradigmas programados encuentran una expresión conveniente en Schema, incluyendo los estilos imperativo, funcional, y paso de mensajes. El Schema continúa evolucionando con una serie de los estándares (Revised<sup>n</sup> Report on the Algorithmic Language Scheme) y una serie de [[Scheme Requests for Implementation]].
 
Además, los dialectos del Lisp son usados como lenguajes de scripting en un número de aplicaciones, con los máss conocidos siendo el [[Emacs Lisp]] en el editor de [[Emacs]], [[Visual Lisp]] en [[AutoCAD]], Nyquist en [[Audacity]].
 
== Innovaciones del lenguaje ==
 
El Lisp fue el primer lenguaje de programación [[Homoiconicidad|homoicónico]]: la representación primaria del código del programa es el mismo tipo de estructura de la lista que también es usada para las principales estructuras de datos. Como resultado, las funciones del Lisp pueden ser manipuladas, alteradas o aún creadas dentro de un programa Lisp sin un extensivo [[analizador sintáctico|análisis sintáctico]] (parsing) o manipulación de código de máquina 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 [[evaluación metacircular]].
 
El ubicua estructura <code>IF THEN ELSE</code>, ahora admitida como un elemento esencial de cualquier lenguaje de programación, fue inventada por McCarthy para el uso en el Lisp, donde vió su primera apariencia en una forma más general (la estructura <code>cond</code>). Fue heredada por el [[ALGOL]], que la popularizó.