b'\n_START_ARTICLE_\nLisp\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nLisp fue inventado por John McCarthy en 1958 mientras estaba en el Instituto Tecnol\xc3\xb3gico de Massachusetts (MIT). McCarthy public\xc3\xb3 su dise\xc3\xb1o en 1960 en un art\xc3\xadculo de Communications of the ACM titulado "Funciones recursivas de expresiones simb\xc3\xb3licas y su c\xc3\xb3mputo a m\xc3\xa1quina, Parte I"\xe2\x80\x8b (la "parte II" nunca fue publicada). All\xc3\xad mostr\xc3\xb3 que con algunos operadores simples y una notaci\xc3\xb3n para las funciones, uno puede construir un lenguaje Turing completo para procesamiento de algoritmos._NEWLINE_Desde 1955 \xc3\xb3 1956, el Information Processing Language fue el primer lenguaje de AI, y ya hab\xc3\xada incluido muchos de los conceptos, tales como proceso por lista y recursi\xc3\xb3n, que vinieron a ser usados en  Lisp._NEWLINE_La notaci\xc3\xb3n original de McCarthy usaba "expresiones M" en corchetes que ser\xc3\xadan traducidas a expresiones S. Como un ejemplo, la expresi\xc3\xb3n M car[cons[A,B]] es equivalente a la expresi\xc3\xb3n S (car (cons A B)). Una vez que Lisp fue implementado, los programadores r\xc3\xa1pidamente eligieron usar expresiones S, y las expresiones M fueron abandonadas. las expresiones M emergieron otra vez con los intentos ef\xc3\xadmeros del MLISP\xe2\x80\x8b de Horace Enea y el CGOL de Vaughan Pratt._NEWLINE_Lisp fue implementado primero por Steve Russell en un computador IBM 704. Russell hab\xc3\xada le\xc3\xaddo el art\xc3\xadculo de McCarthy, y se dio cuenta (para la sorpresa de McCarthy) que la funci\xc3\xb3n eval de Lisp pod\xc3\xada ser implementada en c\xc3\xb3digo de m\xc3\xa1quina. El resultado fue un int\xc3\xa9rprete de Lisp funcional que pod\xc3\xada ser usado para correr programas Lisp, o m\xc3\xa1s correctamente, "evaluar expresiones Lisp"._NEWLINE_Dos rutinas de lenguaje ensamblador para el IBM 704 se convirtieron en las operaciones primitivas para descomponer listas: car (contenido del registro de direcci\xc3\xb3n) y cdr (contenido del registro del decremento). Los dialectos de Lisp todav\xc3\xada usan el car y cdr (pronunciado /\xcb\x88k\xc9\x91r/ y /\xcb\x88k\xca\x8ad\xc9\x99r/) para las operaciones que retornan el primer elemento y el resto de la lista respectivamente._NEWLINE_El primer compilador completo de Lisp, escrito en Lisp, fue implementado en 1962 por Tim Hart y Mike Levin en el MIT.\xe2\x80\x8b Este compilador introdujo el modelo Lisp de compilaci\xc3\xb3n incremental, en el cual las funciones compiladas e interpretadas pueden entremezclarse libremente. El lenguaje en los memos de Hart y Levin es mucho m\xc3\xa1s cercano al estilo moderno de Lisp que el anterior c\xc3\xb3digo de McCarthy.\n_START_SECTION_\nGenealog\xc3\xada y variantes\n_START_PARAGRAPH_\nSobre su historia de cincuenta a\xc3\xb1os, Lisp ha producido muchas variaciones en el tema base de un lenguaje de expresi\xc3\xb3n S. Por otra parte, cada dialecto dado puede tener varias implementaciones, por ejemplo, hay m\xc3\xa1s de una docena de implementaciones del Common Lisp._NEWLINE_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\xc3\xa1 estandarizado, sin embargo, las implementaciones conformadas soportan el mismo lenguaje base, pero con diferentes extensiones y bibliotecas.\n_START_SECTION_\nRelaci\xc3\xb3n con la inteligencia artificial\n_START_PARAGRAPH_\nDesde su inicio, Lisp estaba estrechamente relacionado con la comunidad de investigaci\xc3\xb3n de la inteligencia artificial, especialmente en sistemas PDP-10.\xe2\x80\x8b Fue usado como la implementaci\xc3\xb3n del lenguaje de programaci\xc3\xb3n Micro Planner que fue la fundaci\xc3\xb3n para el famoso sistema de AI SHRDLU. En los a\xc3\xb1os 1970, a medida que la investigaci\xc3\xb3n del AI engendr\xc3\xb3 descendientes comerciales, el desempe\xc3\xb1o de los sistemas Lisp existentes se convirti\xc3\xb3 en un problema creciente._NEWLINE_Lisp era un sistema dif\xc3\xadcil de implementar con las t\xc3\xa9cnicas de compilador y hardware com\xc3\xban de los a\xc3\xb1os 1970. Las rutinas de recolecci\xc3\xb3n de basura, desarrolladas por el entonces estudiante graduado del MIT, Daniel Edwards, hicieron pr\xc3\xa1ctico correr Lisp en sistemas de computaci\xc3\xb3n de prop\xc3\xb3sito general, pero la eficacia todav\xc3\xada segu\xc3\xada siendo un problema. Esto llev\xc3\xb3 a la creaci\xc3\xb3n de las m\xc3\xa1quinas Lisp: hardware dedicado para correr ambientes y programas Lisp. Avances tanto en el hardware de computadora como en la tecnolog\xc3\xada de compiladores pronto hicieron obsoletas a las m\xc3\xa1quinas de Lisp, en detrimento del mercado de Lisp._NEWLINE_Durante los a\xc3\xb1os 1980 y 1990, fue hecho un gran esfuerzo para unificar los numerosos dialectos de Lisp en un solo lenguaje (m\xc3\xa1s notablemente, InterLisp, Maclisp, ZetaLisp, MetaLisp, y Franz Lisp). El nuevo lenguaje, Common Lisp, fue esencialmente un subconjunto compatible de los dialectos que reemplaz\xc3\xb3. En 1994, la ANSI public\xc3\xb3 el est\xc3\xa1ndar del Common Lisp, "ANSI X3.226-1994 Information Technology Programming Language Common Lisp". En aquel momento el mercado mundial para Lisp era mucho m\xc3\xa1s peque\xc3\xb1o de lo que es hoy.\n_START_SECTION_\nDesde el a\xc3\xb1o 2000\n_START_PARAGRAPH_\nHabiendo declinado algo en los a\xc3\xb1os noventa, Lisp experiment\xc3\xb3 un nuevo auge enfocado en las implementaciones abiertas de Common Lisp y en el desarrollo de aplicaciones y de nuevas bibliotecas port\xc3\xa1tiles. Una muestra de este inter\xc3\xa9s fue el que la versi\xc3\xb3n impresa de Practical Common Lisp (Common Lisp Pr\xc3\xa1ctico) de Peter Seibel, un tutorial para nuevos programadores publicado en 2004,\xe2\x80\x8b estuviese brevemente en Amazon.com como el segundo libro de programaci\xc3\xb3n m\xc3\xa1s popular. El libro es accesible en l\xc3\xadnea sin costo.\xe2\x80\x8b_NEWLINE_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\xc3\xa1s productivo que otros lenguajes.\xe2\x80\x8b 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.\xe2\x80\x8b_NEWLINE_En su encuesta de las implementaciones del Common Lisp, Dan Weinreb lista once implementaciones activamente mantenidas. Scieneer Common Lisp es una nueva implementaci\xc3\xb3n comercial que bifurc\xc3\xb3 (fork) del CMUCL con un primer lanzamiento en 2002._NEWLINE_La comunidad del c\xc3\xb3digo libre ha creado la nueva infraestructura de soporte: Cliki es un Wiki que recoge la informaci\xc3\xb3n 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 distribuci\xc3\xb3n y el intercambio y comentario de retazos de c\xc3\xb3digo (snippets), el Planet Lisp recoge el contenido de varios blogs relacionados con Lisp, en el LispForum el usuario discute t\xc3\xb3picos sobre Lisp, Lispjobs es un servicio para anunciar ofertas de trabajo y hay un nuevo servicio de noticias semanales (Weekly Lisp News)._NEWLINE_Han sido celebrados los 50 a\xc3\xb1os del Lisp (1958-2008) en LISP50@OOPSLA. Hay varias reuniones de usuario locales regulares (Boston, Vancouver, Hamburg,\xe2\x80\xa6), Reuniones Lisp (European Common Lisp Meeting, European Lisp Symposium) y una International Lisp Conference._NEWLINE_La comunidad Scheme mantiene activamente m\xc3\xa1s de veinte implementaciones. Se han desarrollado en los \xc3\xbaltimos a\xc3\xb1os varias significativas nuevas implementaciones (Chicken, Gauche, Ikarus, Larceny, Ypsilon). El est\xc3\xa1ndar de Scheme Revised\xe2\x81\xb5 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\xc3\xa1ndares para el Scheme. Las comunidades de usuario de implementaciones individuales del Scheme contin\xc3\xbaan creciendo. En 2003 un nuevo proceso de estandarizaci\xc3\xb3n del lenguaje fue comenzada y condujo al est\xc3\xa1ndar R\xe2\x81\xb6RS del Scheme en 2007. El uso acad\xc3\xa9mico del Scheme para ense\xc3\xb1ar ciencias de la computaci\xc3\xb3n parece haber declinado algo. Algunas universidades ya no est\xc3\xa1n usando Scheme en sus cursos preliminares de ciencias de la computaci\xc3\xb3n._NEWLINE_Hay tambi\xc3\xa9n 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\xc3\xb3n con Cocoa de Apple.\n_START_SECTION_\nDialectos importantes\n_START_PARAGRAPH_\nLos dos principales dialectos de Lisp usados para la programaci\xc3\xb3n de prop\xc3\xb3sitos generales hoy en d\xc3\xada son Common Lisp y Scheme. Estos lenguajes representan opciones de dise\xc3\xb1o significativamente diferentes._NEWLINE_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\xc3\xa1ndar de lenguaje grande incluyendo muchos tipos de datos y formas sint\xc3\xa1cticas incorporados, as\xc3\xad como un sistema del objeto. El Scheme es un dise\xc3\xb1o m\xc3\xa1s minimalista, con un mucho m\xc3\xa1s peque\xc3\xb1o conjunto de caracter\xc3\xadsticas est\xc3\xa1ndar pero con ciertas caracter\xc3\xadsticas de implementaci\xc3\xb3n (tales como optimizaci\xc3\xb3n de llamada de cola y continuaci\xc3\xb3n completa) no encontradas necesariamente en Common Lisp. El Common Lisp tambi\xc3\xa9n tom\xc3\xb3 prestadas ciertas caracter\xc3\xadsticas de Scheme tales como \xc3\xa1mbito de l\xc3\xa9xico y clausura l\xc3\xa9xica._NEWLINE_El Scheme, es un dialecto del lenguaje Lisp con \xc3\xa1mbito est\xc3\xa1tico y cola recursiva aut\xc3\xa9ntica inventado por Guy Lewis Steele Jr. y Gerald Jay Sussman. Fue dise\xc3\xb1ado para tener una sem\xc3\xa1ntica excepcionalmente clara y simple y pocas maneras diferentes de formar expresiones. Una amplia variedad de paradigmas programados encuentran una expresi\xc3\xb3n conveniente en Scheme, incluyendo los estilos imperativo, funcional, y paso de mensajes. El Scheme contin\xc3\xbaa evolucionando con una serie de los est\xc3\xa1ndares (Revised\xe2\x81\xbf Report on the Algorithmic Language Scheme) y una serie de Scheme Requests for Implementation._NEWLINE_Adem\xc3\xa1s, los dialectos de Lisp son usados como lenguajes de scripting en un n\xc3\xbamero de aplicaciones, con los m\xc3\xa1s conocidos siendo el Emacs Lisp en el editor de Emacs, Visual Lisp en AutoCAD, Nyquist en Audacity.\n_START_SECTION_\nInnovaciones del lenguaje\n_START_PARAGRAPH_\nLisp fue el primer lenguaje de programaci\xc3\xb3n homoic\xc3\xb3nico: la representaci\xc3\xb3n primaria del c\xc3\xb3digo del programa es el mismo tipo de estructura de la lista que tambi\xc3\xa9n es usada para las principales estructuras de datos. Como resultado, las funciones de Lisp pueden ser manipuladas, alteradas o a\xc3\xban creadas dentro de un programa Lisp sin un extensivo an\xc3\xa1lisis sint\xc3\xa1ctico (parsing) o manipulaci\xc3\xb3n de c\xc3\xb3digo de m\xc3\xa1quina 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\xc3\xb3n metacircular._NEWLINE_La ubicua estructura IF THEN ELSE, ahora admitida como un elemento esencial de cualquier lenguaje de programaci\xc3\xb3n, fue inventada por McCarthy para el uso en Lisp, donde vio su primera apariencia en una forma m\xc3\xa1s general (la estructura cond). Fue heredada por el ALGOL, que la populariz\xc3\xb3._NEWLINE_Lisp influy\xc3\xb3 profundamente a Alan Kay, el l\xc3\xadder de investigaci\xc3\xb3n del Smalltalk, y entonces a su vez Lisp fue influenciado por Smalltalk, adoptando las caracter\xc3\xadsticas de la programaci\xc3\xb3n orientada a objetos (clases, instancias, etc.) a finales de los a\xc3\xb1os 1970._NEWLINE_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 AI, como lo fueron el FORTRAN y el descendiente del lenguaje ALGOL, el lenguaje C. Lenguajes m\xc3\xa1s nuevos como Java y Python han incorporado algunas versiones limitadas de algunas de las caracter\xc3\xadsticas 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\xc3\xa1micas, Lisp est\xc3\xa1n disfrutando actualmente de un cierto resurgimiento del inter\xc3\xa9s popular.\n_START_SECTION_\nListas\n_START_PARAGRAPH_\nEl elemento fundamental en Lisp es la lista, en el sentido m\xc3\xa1s amplio del t\xc3\xa9rmino, pues tanto los datos como los programas son listas. De ah\xc3\xad viene su nombre, pues Lisp es un acr\xc3\xb3nimo de "ListProcessing"._NEWLINE_Las listas en LISP est\xc3\xa1n delimitadas por par\xc3\xa9ntesis. De aqu\xc3\xad viene el chiste del significado de LISP: "LostInStupidParentheses" que aunque con buen humor es completamente ficticio._NEWLINE_Algunas de las funciones predefinidas de Lisp tienen s\xc3\xadmbolos familiares (+ para la suma, * para el producto), pero otras son m\xc3\xa1s ex\xc3\xb3ticas, especialmente dos que sirven precisamente para manipular listas, descomponi\xc3\xa9ndolas en sus componentes. Sus nombres ("car" y "cdr") son un poco extra\xc3\xb1os, reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generaci\xc3\xb3n, "car" devuelve la cabeza de una lista y "cdr" su cola o resto._NEWLINE_Lisp sigue una filosof\xc3\xada de tratamiento no-destructivo de los par\xc3\xa1metros, de modo que la mayor\xc3\xada de las funciones devuelven una lista resultado de efectuar alguna transformaci\xc3\xb3n sobre la que recibieron, pero sin alterar esta \xc3\xbaltima._NEWLINE_Uno de los motivos por los que Lisp es especialmente adecuado para la IA es el hecho de que el c\xc3\xb3digo y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas seg\xc3\xban las circunstancias._NEWLINE_Lisp fue uno de los primeros lenguajes de programaci\xc3\xb3n en incluir manejo de excepciones con las primitivas catch y throw._NEWLINE_Derivado de Lisp es el lenguaje de programaci\xc3\xb3n Logo. Sin entrar en detalles, podr\xc3\xada decirse que Logo es Lisp sin par\xc3\xa9ntesis y con operadores aritm\xc3\xa9ticos infijos.\n_START_SECTION_\nHola mundo\n_START_PARAGRAPH_\n(format t "\xc2\xa1Hola, mundo!")\n_START_SECTION_\nTrabajando con listas\n_START_PARAGRAPH_\n*******************************************************************Definici\xc3\xb3n de la funci\xc3\xb3n:_NEWLINE__NEWLINE_  (defun vacia (l)_NEWLINE_    (cond ((null l) 1)    ; si la lista esta vac\xc3\xada devuelve 1_NEWLINE_          (t 0)))         ; en otro caso (lista llena) devuelve 0Llamada a la funci\xc3\xb3n:_NEWLINE__NEWLINE_  (vacia \'(1 3 4))        ; La lista no esta vac\xc3\xada, devolver\xc3\xada 0_NEWLINE_  (vacia \'())             ; La lista esta vac\xc3\xada, devolver\xc3\xada 1*******************************************************************(defun \xc3\xbaltimo (lista)_NEWLINE_  (cond ((null (cdr lista)) (car lista))_NEWLINE_        (t (\xc3\xbaltimo (cdr lista)))))(\xc3\xbaltimo \'(1 2 3 4 5 6 7)) ; devuelve el \xc3\xbaltimo de la lista: 7*******************************************************************; ---FACTORIAL----;Definici\xc3\xb3n matem\xc3\xa1tica; Factorial(x) = 1 si x=0 caso base; x*factorial(x-1) si x>0 caso recursivo;Funci\xc3\xb3n factorial hecha con recursividad no final(defun factorial (n)_NEWLINE_   (if (= 0 n)_NEWLINE_     1                            ; caso base_NEWLINE_     (* n (factorial (- n 1)))))  ; caso recursivo(factorial 4) ;esto nos devolver\xc3\xada 24=4*3*2*1*******************************************************************\n_START_SECTION_\nGrandes valores de la Funci\xc3\xb3n de Ackermann\n_START_PARAGRAPH_\n;Propuesta por Nikolai Coica_NEWLINE_ (defun ackermann (m n) "The Ackermann Function"_NEWLINE_   (cond ((= m 0) (+ n 1))_NEWLINE_         ((= m 1) (+ n 2))_NEWLINE_         ((= m 2) (+ 3 (* n 2)))_NEWLINE_         ((= m 3) (+ 5 (* 8 (- (expt 2 n) 1))))_NEWLINE_         (t (cond ((= n 0) (ackermann (- m 1) 1))_NEWLINE_                  (t (ackermann (- m 1) (ackermann m (- n 1))))))))'