fbpx
Wikipedia

Lisp

Lisp (históricamente LISP) es una familia de lenguajes de programación de computadora de tipo multiparadigma con larga historia y una inconfundible y útil sintaxis homoicónica basada en la notación polaca.

Lisp
John McCarthy y Steve Russell
Información general
Paradigma multiparadigma: declarativo, funcional, orientado a objetos
Apareció en 1958
Diseñado por John McCarthy
Sistema de tipos varios
Implementaciones múltiples
Dialectos Common Lisp, Scheme, Emacs Lisp, Clojure, AutoLISP, Hy, Arc, Franz Lisp, Maclisp, Racket
Influido por Information Processing Language
Ha influido a Perl, Python, Javascript, Lua, Scala, Ruby, R, Elixir, Haskell, Forth, Julia, Smalltalk, CLOS, Dylan, Wolfram

Desarrollado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnológico de Massachusetts, Lisp es el segundo lenguaje de programación de alto nivel de mayor antigüedad; apareció un año después de FORTRAN y uno antes que COBOL.

Al igual que COBOL y FORTRAN, Lisp ha cambiado mucho desde sus comienzos, y han existido un gran número de dialectos en su historia. Hoy, los dialectos de Lisp más ampliamente usados son Scheme (1975), Common Lisp (1984), Emacs Lisp (1985) y Clojure (2007).

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 favorito en la investigación de la inteligencia artificial (AI). Como lenguajes de programación precursor, Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador auto contenido.

El acrónimo LISP significa "LISt Processor" (Procesamiento de listas). Las listas encadenadas son una de las estructuras de datos importantes de Lisp, y el código fuente de Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular código fuente de Lisp como si fueran simples datos, dando lugar a sistemas de macros que permiten a los programadores crear lenguajes de dominio específico embebidos en 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 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 (f x y z).

Historia

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 artículo de Communications of the ACM titulado "Funciones recursivas de expresiones simbólicas y su cómputo a máquina, Parte I"[1]​ (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 procesamiento de algoritmos.

Desde 1955 o 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 Lisp.

La notación original de McCarthy usaba "expresiones M" en corchetes que serían traducidas a expresiones S. Como un ejemplo, la expresión M car[cons[A,B]] es equivalente a la expresión S (car (cons A B)). Una vez que 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[2]​ de Horace Enea y el CGOL de Vaughan Pratt.

Lisp fue implementado primero por Steve Russell en un computador IBM 704. Russell había leído el artículo de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la función eval de Lisp podía ser implementada en código de máquina. El resultado fue un 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 (contenido del registro de dirección) y cdr (contenido del registro del decremento). Los dialectos de Lisp todavía usan el car y cdr (pronunciado /ˈkɑr/ y /ˈ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.[3]​ 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 de Lisp que el anterior código de McCarthy.

Genealogía y variantes

Sobre su historia de cincuenta años, 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, Lisp estaba estrechamente relacionado con la comunidad de investigación de la inteligencia artificial, especialmente en sistemas PDP-10.[4]​ Fue usado como la implementación del lenguaje de programación 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.

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á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 de Lisp.

Durante los años 1980 y 1990, fue hecho un gran esfuerzo para unificar los numerosos dialectos de 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 Lisp era mucho más pequeño de lo que es hoy.[cita requerida]

Desde el año 2000

Habiendo declinado algo en los años noventa, Lisp experimentó un nuevo auge enfocado en las implementaciones abiertas de Common Lisp y en el desarrollo de aplicaciones y de nuevas bibliotecas portátiles. Una muestra de este interés fue el que la versión impresa de Practical Common Lisp (Common Lisp Práctico) de Peter Seibel, un tutorial para nuevos programadores publicado en 2004,[5]​ estuviese brevemente en Amazon.com como el segundo libro de programación más popular. El libro es accesible en línea sin costo.[6]

Muchos nuevos programadores de 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 afirman que es sustancialmente más productivo que otros lenguajes.[7]​ Este aumento de conciencia puede ser contrastado con el "invierno de la inteligencia artificial" y el breve crecimiento de Lisp a mediados de los 1990.[8]

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 del código libre ha creado la nueva infraestructura de soporte: Cliki es un Wiki que recoge la información relacionada con Common Lisp, el lista recursos, el #lisp es un canal popular de IRC (con soporte por un Bot escrito en Lisp), lisppaste soporta la distribución y el intercambio y comentario de retazos de código (snippets), el Planet Lisp recoge el contenido de varios blogs relacionados con Lisp, en el LispForum el usuario discute tópicos 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 años del Lisp (1958-2008) en LISP50@OOPSLA. Hay varias reuniones de usuario locales regulares (Boston, Vancouver, ,…), Reuniones Lisp (European Common Lisp Meeting, ) y una 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 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 estándares 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 R6RS 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 Rich Hickey) y NU para la programación con Cocoa de Apple.

Dialectos importantes

Los dos principales dialectos de 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 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 Scheme, incluyendo los estilos imperativo, funcional, y paso de mensajes. El Scheme continúa evolucionando con una serie de los estándares (Revisedn Report on the Algorithmic Language Scheme) y una serie de Scheme Requests for Implementation.

Además, los dialectos de Lisp son usados como lenguajes de scripting en un número de aplicaciones, con los más conocidos siendo el Emacs Lisp en el editor de Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity.

Innovaciones del lenguaje

Fue en Lisp donde nacieron muchas ideas de las ciencias de la computación, incluyendo la estructura de dato de árbol, recolección automática de basura, tipado dinámico, condicionales, funciones de orden superior como map y reduce, recursividad, el compilador autocontenido y el REPL.[9][10]

Lisp fue el primer lenguaje de programación homoicónico: todo el código fuente del programa es al mismo tiempo una estructura de datos del lenguaje (listas anidadas o árboles). Como resultado la metaprogramación en Lisp es relativamente sencilla. Ya que el código fuente de Lisp tiene una correspondencia directa con el árbol sintáctico abstracto del programa, se puede crear código de Lisp para manipular más código de Lisp, o aún crearlo desde cero, sin necesidad de un extensivo 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.

La ubicua estructura IF THEN ELSE, ahora admitida como un elemento esencial de cualquier lenguaje de programación, fue inventada por McCarthy para el uso en Lisp, donde vio su primera apariencia en una forma más general (la estructura cond). Fue heredada por el ALGOL, que la popularizó.

Lisp influyó profundamente a Alan Kay, el líder de investigación del Smalltalk, y entonces a su vez Lisp fue influenciado por Smalltalk, adoptando las características de la programación orientada a objetos (clases, instancias, etc.) a finales de los años 1970.

Lisp introdujo el concepto de recolección de basura, mediante el cual el sistema busca en el "heap" de memoria dinámica para eliminar objetos obsoletos sin intervención explícita del programador.[11]

En gran parte debido a sus requerimientos de recursos con respecto al temprano hardware computacional (incluyendo los primeros microprocesadores), Lisp no se hizo tan popular fuera de la comunidad de inteligencia artificial, como lo fueron el FORTRAN y el descendiente del lenguaje ALGOL, el lenguaje C. Lenguajes más nuevos como Java y Python han incorporado algunas versiones limitadas de algunas de las características de Lisp, pero no pueden necesariamente brindar la coherencia y la sinergia de los conceptos completos encontrados en Lisp. Debido a su conveniencia para aplicaciones mal definidas, complejas, y dinámicas, Lisp están disfrutando actualmente de un cierto resurgimiento del interés popular.

Listas

El elemento fundamental en Lisp es la lista, en el sentido más amplio del término, pues tanto los datos como los programas son listas. De ahí viene su nombre, pues Lisp es un acrónimo de "ListProcessing".

Las listas en LISP están delimitadas por paréntesis. 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 símbolos familiares (+ para la suma, * para el producto), pero otras son más exóticas, especialmente dos que sirven precisamente para manipular listas, descomponiéndolas en sus componentes. Sus nombres ("car" y "cdr") son un poco extraños, reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generación, "car" devuelve la cabeza de una lista y "cdr" su cola o resto.

Lisp sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo que la mayoría de las funciones devuelven una lista resultado de efectuar alguna transformación 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 código y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas según las circunstancias.

Lisp fue uno de los primeros lenguajes de programación en incluir manejo de excepciones con las primitivas catch y throw.

Derivado de Lisp es el lenguaje de programación Logo. Sin entrar en detalles, podría decirse que Logo es Lisp sin paréntesis y con operadores aritméticos infijos.

Orígenes de "car" y "cdr"

  • car: Content of Address part of Register
  • cdr: Content of Decremental part of Register

Son operaciones del conjunto de instrucciones del IBM 704

Ejemplos

Hola mundo

(format t "¡Hola, mundo!") 

Trabajando con listas

******************************************************************* Definición de la función: (defun vacia (l) (cond ((null l) 1) ; si la lista esta vacía devuelve 1  (t 0))) ; en otro caso (lista llena) devuelve 0 Llamada a la función: (vacia '(1 3 4)) ; La lista no esta vacía, devolvería 0 (vacia '())  ; La lista esta vacía, devolvería 1 ******************************************************************* (defun último (lista) (cond ((null (cdr lista)) (car lista)) (t (último (cdr lista))))) (último '(1 2 3 4 5 6 7)) ; devuelve el último de la lista: 7 ******************************************************************* ; ---FACTORIAL---- ;Definición matemática ; Factorial(x) = 1 si x=0 caso base ; x*factorial(x-1) si x>0 caso recursivo ;Función factorial hecha con recursividad no final (defun factorial (n) (if (= 0 n) 1   ; caso base (* n (factorial (- n 1))))) ; caso recursivo (factorial 4) ;esto nos devolvería 24=4*3*2*1 ******************************************************************* 

Grandes valores de la Función 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)))))))) 

Referencias

  1. John McCarthy. «Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I». Consultado el 21 de enero de 2021. 
  2. David Canfield Smith. . Archivado desde el original el 24 de septiembre de 2006. Consultado el 13 de octubre de 2006. 
  3. Tim Hart and Mike Levin. «AI Memo 39-The new compiler». Consultado el 13 de octubre de 2006. 
  4. 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 Johnson (18 de octubre de 1990). «The History of TOPS or Life in the Fast ACs». alt.folklore.computers. 84950@tut.cis.ohio-state.edu. «The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal.» 
  5. Practical Common Lisp going into 3rd printing
  6. Practical Common Lisp
  7. . Archivado desde el original el 4 de octubre de 2006. Consultado el 13 de octubre de 2006. 
  8. . Archivado desde el original el 3 de junio de 2013. Consultado el 19 de septiembre de 2009. 
  9. Chisnall, David (12 de enero de 2011). Influential Programming Languages, Part 4: Lisp. Consultado el 22 de mayo de 2020. 
  10. «Revenge of the Nerds». www.paulgraham.com. Consultado el 22 de mayo de 2020. 
  11. LiebermanHenry; HewittCarl (1 de junio de 1983). «A real-time garbage collector based on the lifetimes of objects». Communications of the ACM (en inglés). doi:10.1145/358141.358147. Consultado el 22 de mayo de 2020. 

Véase también

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre Programación en LISP.
  • Una discusión de algunas de las características más sobresalientes del lenguaje.
  • Recursos Lisp en español Textos en español y traducciones sobre Lisp, Common Lisp, Emacs Lisp, etc.
  • Practical Common Lisp Libro introductorio de Common Lisp. Versión en línea y distribuible por la propia editorial.
  • The Nature of Lisp. Una introducción para entender la naturaleza del lenguaje y su poder.

Aplicaciones en Lisp

Entre las más exitosas aplicaciones escritas en Lisp se pueden mencionar:

Compiladores de Lisp

  •   Datos: Q132874
  •   Multimedia: Lisp (programming language)
  •   Libros y manuales: Programación en LISP

lisp, históricamente, lisp, familia, lenguajes, programación, computadora, tipo, multiparadigma, larga, historia, inconfundible, útil, sintaxis, homoicónica, basada, notación, polaca, john, mccarthy, steve, russellinformación, generalparadigmamultiparadigma, d. Lisp historicamente LISP es una familia de lenguajes de programacion de computadora de tipo multiparadigma con larga historia y una inconfundible y util sintaxis homoiconica basada en la notacion polaca LispJohn McCarthy y Steve RussellInformacion generalParadigmamultiparadigma declarativo funcional orientado a objetosAparecio en1958Disenado porJohn McCarthySistema de tiposvariosImplementacionesmultiplesDialectosCommon Lisp Scheme Emacs Lisp Clojure AutoLISP Hy Arc Franz Lisp Maclisp RacketInfluido porInformation Processing LanguageHa influido aPerl Python Javascript Lua Scala Ruby R Elixir Haskell Forth Julia Smalltalk CLOS Dylan Wolfram editar datos en Wikidata Desarrollado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnologico de Massachusetts Lisp es el segundo lenguaje de programacion de alto nivel de mayor antiguedad aparecio un ano despues de FORTRAN y uno antes que COBOL Al igual que COBOL y FORTRAN Lisp ha cambiado mucho desde sus comienzos y han existido un gran numero de dialectos en su historia Hoy los dialectos de Lisp mas ampliamente usados son Scheme 1975 Common Lisp 1984 Emacs Lisp 1985 y Clojure 2007 Lisp fue creado originalmente como una notacion matematica practica para los programas de computadora basada en el calculo lambda de Alonzo Church Se convirtio rapidamente en el lenguaje de programacion favorito en la investigacion de la inteligencia artificial AI Como lenguajes de programacion precursor Lisp fue pionero en muchas ideas en ciencias de la computacion incluyendo las estructuras de datos de arbol el manejo de almacenamiento automatico tipos dinamicos y el compilador auto contenido El acronimo LISP significa LISt Processor Procesamiento de listas Las listas encadenadas son una de las estructuras de datos importantes de Lisp y el codigo fuente de Lisp en si mismo esta compuesto de listas Como resultado los programas de Lisp pueden manipular codigo fuente de Lisp como si fueran simples datos dando lugar a sistemas de macros que permiten a los programadores crear lenguajes de dominio especifico embebidos en Lisp La intercambiabilidad del codigo y los datos tambien da a Lisp su instantaneamente reconocible sintaxis Todo el codigo del programa es escrito como expresiones S o listas entre parentesis Una llamada de funcion o una forma sintactica es escrita como una lista con la funcion o el nombre del operador en primer lugar y los argumentos a continuacion por ejemplo una funcion f que toma tres argumentos puede ser llamada usando f x y z Indice 1 Historia 1 1 Genealogia y variantes 1 2 Relacion con la inteligencia artificial 1 3 Desde el ano 2000 2 Dialectos importantes 3 Innovaciones del lenguaje 4 Listas 5 Origenes de car y cdr 6 Ejemplos 6 1 Hola mundo 6 1 1 Trabajando con listas 6 2 Grandes valores de la Funcion de Ackermann 7 Referencias 8 Vease tambien 9 Enlaces externos 9 1 Aplicaciones en Lisp 9 2 Compiladores de LispHistoria EditarLisp fue inventado por John McCarthy en 1958 mientras estaba en el Instituto Tecnologico de Massachusetts MIT McCarthy publico su diseno en 1960 en un articulo de Communications of the ACM titulado Funciones recursivas de expresiones simbolicas y su computo a maquina Parte I 1 la parte II nunca fue publicada Alli mostro que con algunos operadores simples y una notacion para las funciones uno puede construir un lenguaje Turing completo para procesamiento de algoritmos Desde 1955 o 1956 el Information Processing Language fue el primer lenguaje de AI y ya habia incluido muchos de los conceptos tales como proceso por lista y recursion que vinieron a ser usados en Lisp La notacion original de McCarthy usaba expresiones M en corchetes que serian traducidas a expresiones S Como un ejemplo la expresion M car cons A B es equivalente a la expresion S car cons A B Una vez que Lisp fue implementado los programadores rapidamente eligieron usar expresiones S y las expresiones M fueron abandonadas las expresiones M emergieron otra vez con los intentos efimeros del MLISP 2 de Horace Enea y el CGOL de Vaughan Pratt Lisp fue implementado primero por Steve Russell en un computador IBM 704 Russell habia leido el articulo de McCarthy y se dio cuenta para la sorpresa de McCarthy que la funcion eval de Lisp podia ser implementada en codigo de maquina El resultado fue un interprete de Lisp funcional que podia ser usado para correr programas Lisp o mas 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 direccion y cdr contenido del registro del decremento Los dialectos de Lisp todavia usan el car y cdr pronunciado ˈkɑr y ˈkʊder 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 compilacion incremental en el cual las funciones compiladas e interpretadas pueden entremezclarse libremente El lenguaje en los memos de Hart y Levin es mucho mas cercano al estilo moderno de Lisp que el anterior codigo de McCarthy Genealogia y variantes Editar Sobre su historia de cincuenta anos Lisp ha producido muchas variaciones en el tema base de un lenguaje de expresion S Por otra parte cada dialecto dado puede tener varias implementaciones por ejemplo hay mas 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 esta estandarizado sin embargo las implementaciones conformadas soportan el mismo lenguaje base pero con diferentes extensiones y bibliotecas Relacion con la inteligencia artificial Editar Desde su inicio Lisp estaba estrechamente relacionado con la comunidad de investigacion de la inteligencia artificial especialmente en sistemas PDP 10 4 Fue usado como la implementacion del lenguaje de programacion Micro Planner que fue la fundacion para el famoso sistema de AI SHRDLU En los anos 1970 a medida que la investigacion del AI engendro descendientes comerciales el desempeno de los sistemas Lisp existentes se convirtio en un problema creciente Lisp era un sistema dificil de implementar con las tecnicas de compilador y hardware comun de los anos 1970 Las rutinas de recoleccion de basura desarrolladas por el entonces estudiante graduado del MIT Daniel Edwards hicieron practico correr Lisp en sistemas de computacion de proposito general pero la eficacia todavia seguia siendo un problema Esto llevo a la creacion de las maquinas Lisp hardware dedicado para correr ambientes y programas Lisp Avances tanto en el hardware de computadora como en la tecnologia de compiladores pronto hicieron obsoletas a las maquinas de Lisp en detrimento del mercado de Lisp Durante los anos 1980 y 1990 fue hecho un gran esfuerzo para unificar los numerosos dialectos de Lisp en un solo lenguaje mas notablemente InterLisp Maclisp ZetaLisp MetaLisp y Franz Lisp El nuevo lenguaje Common Lisp fue esencialmente un subconjunto compatible de los dialectos que reemplazo En 1994 la ANSI publico el estandar del Common Lisp ANSI X3 226 1994 Information Technology Programming Language Common Lisp En aquel momento el mercado mundial para Lisp era mucho mas pequeno de lo que es hoy cita requerida Desde el ano 2000 Editar Habiendo declinado algo en los anos noventa Lisp experimento un nuevo auge enfocado en las implementaciones abiertas de Common Lisp y en el desarrollo de aplicaciones y de nuevas bibliotecas portatiles Una muestra de este interes fue el que la version impresa de Practical Common Lisp Common Lisp Practico de Peter Seibel un tutorial para nuevos programadores publicado en 2004 5 estuviese brevemente en Amazon com como el segundo libro de programacion mas popular El libro es accesible en linea sin costo 6 Muchos nuevos programadores de 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 afirman que es sustancialmente mas productivo que otros lenguajes 7 Este aumento de conciencia puede ser contrastado con el invierno de la inteligencia artificial y el breve crecimiento de Lisp a mediados de los 1990 8 En su encuesta de las implementaciones del Common Lisp Dan Weinreb lista once implementaciones activamente mantenidas Scieneer Common Lisp es una nueva implementacion comercial que bifurco fork del CMUCL con un primer lanzamiento en 2002 La comunidad del codigo libre ha creado la nueva infraestructura de soporte Cliki es un Wiki que recoge la informacion relacionada con 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 distribucion y el intercambio y comentario de retazos de codigo snippets el Planet Lisp recoge el contenido de varios blogs relacionados con Lisp en el LispForum el usuario discute topicos 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 anos 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 mas de veinte implementaciones Se han desarrollado en los ultimos anos varias significativas nuevas implementaciones Chicken Gauche Ikarus Larceny Ypsilon El estandar 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 estandares para el Scheme Las comunidades de usuario de implementaciones individuales del Scheme continuan creciendo En 2003 un nuevo proceso de estandarizacion del lenguaje fue comenzada y condujo al estandar R6RS del Scheme en 2007 El uso academico del Scheme para ensenar ciencias de la computacion parece haber declinado algo Algunas universidades ya no estan usando Scheme en sus cursos preliminares de ciencias de la computacion Hay tambien 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 programacion con Cocoa de Apple Dialectos importantes EditarLos dos principales dialectos de Lisp usados para la programacion de propositos generales hoy en dia son Common Lisp y Scheme Estos lenguajes representan opciones de diseno 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 estandar de lenguaje grande incluyendo muchos tipos de datos y formas sintacticas incorporados asi como un sistema del objeto El Scheme es un diseno mas minimalista con un mucho mas pequeno conjunto de caracteristicas estandar pero con ciertas caracteristicas de implementacion tales como optimizacion de llamada de cola y continuacion completa no encontradas necesariamente en Common Lisp El Common Lisp tambien tomo prestadas ciertas caracteristicas de Scheme tales como ambito de lexico y clausura lexica El Scheme es un dialecto del lenguaje Lisp con ambito estatico y cola recursiva autentica inventado por Guy Lewis Steele Jr y Gerald Jay Sussman Fue disenado para tener una semantica excepcionalmente clara y simple y pocas maneras diferentes de formar expresiones Una amplia variedad de paradigmas programados encuentran una expresion conveniente en Scheme incluyendo los estilos imperativo funcional y paso de mensajes El Scheme continua evolucionando con una serie de los estandares Revisedn Report on the Algorithmic Language Scheme y una serie de Scheme Requests for Implementation Ademas los dialectos de Lisp son usados como lenguajes de scripting en un numero de aplicaciones con los mas conocidos siendo el Emacs Lisp en el editor de Emacs Visual Lisp en AutoCAD Nyquist en Audacity Innovaciones del lenguaje EditarFue en Lisp donde nacieron muchas ideas de las ciencias de la computacion incluyendo la estructura de dato de arbol recoleccion automatica de basura tipado dinamico condicionales funciones de orden superior como map y reduce recursividad el compilador autocontenido y el REPL 9 10 Lisp fue el primer lenguaje de programacion homoiconico todo el codigo fuente del programa es al mismo tiempo una estructura de datos del lenguaje listas anidadas o arboles Como resultado la metaprogramacion en Lisp es relativamente sencilla Ya que el codigo fuente de Lisp tiene una correspondencia directa con el arbol sintactico abstracto del programa se puede crear codigo de Lisp para manipular mas codigo de Lisp o aun crearlo desde cero sin necesidad de un extensivo analisis sintactico parsing o manipulacion de codigo de maquina 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 evaluacion metacircular La ubicua estructura IF THEN ELSE ahora admitida como un elemento esencial de cualquier lenguaje de programacion fue inventada por McCarthy para el uso en Lisp donde vio su primera apariencia en una forma mas general la estructura cond Fue heredada por el ALGOL que la popularizo Lisp influyo profundamente a Alan Kay el lider de investigacion del Smalltalk y entonces a su vez Lisp fue influenciado por Smalltalk adoptando las caracteristicas de la programacion orientada a objetos clases instancias etc a finales de los anos 1970 Lisp introdujo el concepto de recoleccion de basura mediante el cual el sistema busca en el heap de memoria dinamica para eliminar objetos obsoletos sin intervencion explicita del programador 11 En gran parte debido a sus requerimientos de recursos con respecto al temprano hardware computacional incluyendo los primeros microprocesadores Lisp no se hizo tan popular fuera de la comunidad de inteligencia artificial como lo fueron el FORTRAN y el descendiente del lenguaje ALGOL el lenguaje C Lenguajes mas nuevos como Java y Python han incorporado algunas versiones limitadas de algunas de las caracteristicas de Lisp pero no pueden necesariamente brindar la coherencia y la sinergia de los conceptos completos encontrados en Lisp Debido a su conveniencia para aplicaciones mal definidas complejas y dinamicas Lisp estan disfrutando actualmente de un cierto resurgimiento del interes popular Listas EditarEl elemento fundamental en Lisp es la lista en el sentido mas amplio del termino pues tanto los datos como los programas son listas De ahi viene su nombre pues Lisp es un acronimo de ListProcessing Las listas en LISP estan delimitadas por parentesis De aqui viene el chiste del significado de LISP LostInStupidParentheses que aunque con buen humor es completamente ficticio Algunas de las funciones predefinidas de Lisp tienen simbolos familiares para la suma para el producto pero otras son mas exoticas especialmente dos que sirven precisamente para manipular listas descomponiendolas en sus componentes Sus nombres car y cdr son un poco extranos reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generacion car devuelve la cabeza de una lista y cdr su cola o resto Lisp sigue una filosofia de tratamiento no destructivo de los parametros de modo que la mayoria de las funciones devuelven una lista resultado de efectuar alguna transformacion sobre la que recibieron pero sin alterar esta ultima Uno de los motivos por los que Lisp es especialmente adecuado para la IA es el hecho de que el codigo y los datos tengan el mismo tratamiento como listas esto hace especialmente sencillo escribir programas capaces de escribir otros programas segun las circunstancias Lisp fue uno de los primeros lenguajes de programacion en incluir manejo de excepciones con las primitivas catch y throw Derivado de Lisp es el lenguaje de programacion Logo Sin entrar en detalles podria decirse que Logo es Lisp sin parentesis y con operadores aritmeticos infijos Origenes de car y cdr EditarArticulo principal CAR y CDR car Content of Address part of Register cdr Content of Decremental part of RegisterSon operaciones del conjunto de instrucciones del IBM 704Ejemplos EditarHola mundo Editar format t Hola mundo Trabajando con listas Editar Definicion de la funcion 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 funcion vacia 1 3 4 La lista no esta vacia devolveria 0 vacia La lista esta vacia devolveria 1 defun ultimo lista cond null cdr lista car lista t ultimo cdr lista ultimo 1 2 3 4 5 6 7 devuelve el ultimo de la lista 7 FACTORIAL Definicion matematica Factorial x 1 si x 0 caso base x factorial x 1 si x gt 0 caso recursivo Funcion factorial hecha con recursividad no final defun factorial n if 0 n 1 caso base n factorial n 1 caso recursivo factorial 4 esto nos devolveria 24 4 3 2 1 Grandes valores de la Funcion de Ackermann Editar 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 Referencias Editar John McCarthy Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I Consultado el 21 de enero de 2021 David Canfield Smith MLISP Users Manual Archivado desde el original el 24 de septiembre de 2006 Consultado el 13 de octubre de 2006 Tim Hart and Mike Levin AI Memo 39 The new compiler Consultado el 13 de octubre de 2006 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 Johnson 18 de octubre de 1990 The History of TOPS or Life in the Fast ACs alt folklore computers 84950 tut cis ohio state edu The PDP 6 project started in early 1963 as a 24 bit machine It grew to 36 bits for LISP a design goal Practical Common Lisp going into 3rd printing Practical Common Lisp The Road To Lisp Survey Archivado desde el original el 4 de octubre de 2006 Consultado el 13 de octubre de 2006 Trends for the Future Archivado desde el original el 3 de junio de 2013 Consultado el 19 de septiembre de 2009 Chisnall David 12 de enero de 2011 Influential Programming Languages Part 4 Lisp Consultado el 22 de mayo de 2020 Revenge of the Nerds www paulgraham com Consultado el 22 de mayo de 2020 LiebermanHenry HewittCarl 1 de junio de 1983 A real time garbage collector based on the lifetimes of objects Communications of the ACM en ingles doi 10 1145 358141 358147 Consultado el 22 de mayo de 2020 Vease tambien EditarInteligencia artificial Common Lisp Scheme MaximaEnlaces externos Editar Wikilibros alberga un libro o manual sobre Programacion en LISP Features of Common Lisp Una discusion de algunas de las caracteristicas mas sobresalientes del lenguaje Recursos Lisp en espanol Textos en espanol y traducciones sobre Lisp Common Lisp Emacs Lisp etc Practical Common Lisp Libro introductorio de Common Lisp Version en linea y distribuible por la propia editorial The Nature of Lisp Una introduccion para entender la naturaleza del lenguaje y su poder Aplicaciones en Lisp Editar Entre las mas exitosas aplicaciones escritas en Lisp se pueden mencionar Emacs el editor de texto http www gnu org software emacs emacs html ACL2 el demostrador de teoremas http www cs utexas edu users moore acl2 Maxima el sistema de algebra computacional http maxima sourceforge net Compiladores de Lisp Editar GNU Common Lisp software libre Allegro Common Lisp software propietario CMU Common Lisp software libre CLISP Una implementacion de Common Lisp software libre OpenMCL Common lisp para Macintosh software libre Datos Q132874 Multimedia Lisp programming language Libros y manuales Programacion en LISPObtenido de https es wikipedia org w index php title Lisp amp oldid 137492073, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos