46-49 lisp.qxd 17/10/05 12:42 Página 46

Ciencia e investigación

Un lenguaje de casi 50 años de historia LLiisspp ((II))

David Arroyo Menéndez, José E. Marchesi finanzas, y también en la educación en ingeniería informática y, por supuesto, en investigación. Lisp es una familia de lenguajes de El nombre Lisp viene de “Procesamiento de Listas”. La estructura de datos de listas y las primitivas para programación con una larga historia. manejarlas son el denominador común de todos los Desarrollado originalmente como una dialectos Lisp, como ya explicaremos más adelante. Otras características comunes de los dialectos Lisp implementación de un modelo incluyen el tipado dinámico, el soporte a la progra- computacional, rápidamente se mación funcional y la habilidad para manejar códi- go fuente como datos. convirtió en el lenguaje favorito para Los lenguajes Lisp tienen una apariencia rápida- hacer investigación en el ámbito de la mente reconocible. El código del programa es escri- to usando la misma sintaxis de listas: la sintaxis de inteligencia artificial. S-expressions. Cada subexpresión en un programa (o estructura de datos) está rodeada con paréntesis. Lisp ha sido pionero en el uso de estructuras de árbol Esto hace que los lenguajes Lisp sean fáciles de par- (S-Expressions), recolección de basura, intérpretes y sear y también de metaprogramar, esto es, crear pro- programación funcional. Hoy dialectos Lisp son usa- gramas que escriben otros programas. Esta es la dos en muchos campos, desde el desarrollo web a las mayor razón para su gran popularidad en los años 70 y 80; los programadores de inteligencia artificial Tabla 1. creyeron que esta característica de Lisp resolvería fácilmente grandes problemas de la IA. Número de resultados en Google en agosto de 2005 Lisp se especificó en 1958, convirtiéndose en el Búsqueda Número de resultados segundo lenguaje de programación de alto nivel que “programming language” java 3.360.000 se usa hoy; solo Fortran es más viejo. Al igual que “programming language” c -c++ 2.790.000 Fortran, Lisp ha cambiado bastante desde sus prime- “programming language” c++ 2.020.000 ros día y numerosos dialectos han existido a través “programming language” perl 1.010.000 de su historia. Hoy, los dialectos Lisp más usados “programming language” python 881.000 para programar son Common Lisp y Scheme. “programming language” shell 568.000 “programming language” lisp 573.000 Historia de Lisp “programming language” ruby 292.000 “programming language” tcl 249.000 Information Processing Language (IPL) fue el primer lenguaje de Inteligencia Artificial (IA), desde 1955 o 1956, y ya incluía muchos de los conceptos, tales Tabla 2. Relación de lenguajes y número de proyectos como procesamiento de listas y facilidades para la recursividad, que fueron usadas en Lisp. en Sourceforge en agosto de 2005 Lisp fue inventado por John McCarthy en 1958 Lenguaje Número de proyectos mientras él estaba en el MIT. McCarthy publicó su C++ 16.111 diseño en un artículo de Comunicaciones del ACM Java 15.849 en 1960, titulado “Recursive Functions of Symbolic C 15.396 Expressions and Their Computation by Machine, Part Perl 6.039 I” (Funciones Recursivas de Expresiones Simbólicas y Python+Zope 4.409 su Computación por Máquinas, Parte I). Curiosa- C# 2.646 mente la segunda parte nunca fue publicada. Él Unix Shell 1.767 mostraba que con unos pocos simples operadores y Tcl 892 una notación para funciones, se puede construir un Ruby 365 lenguaje de programación completo. Scheme 195 La notación original usada por McCartyhy estaba Common Lisp 18 basada en “M-expressions”. Esta fue rápidamente Emacs Lisp 9 abandonada en favor de las S-expressions que él

MUNDO nº84 Linux 46 http://digital.revistasprofesionales.com 46-49 lisp.qxd 17/10/05 12:42 Página 47

Ciencia e investigación Lisp (I)

programas. Las técnicas de construcción de Lisp no es tan usado como otros lenguajes; sin compiladores modernos y las gigantescas embargo, constituye una pieza fundamental capacidades de los computadores de hoy en para entender la historia de la informática y día han hecho esta especialización hardware gente bastante inteligente sigue escribiendo innecesaria y hoy disfrutamos de entornos código Lisp. Lisp mucho más eficientes que otros lengua- jes más populares. Lisp como lenguaje de extensión Entre 1980 y 1990, se hace un gran esfuer- zo para unificar los numerosos dialectos Lisp Lisp ha sido usado múltiples veces como len- dentro de un lenguaje simple. El nuevo len- guaje de extensión. Los ejemplos más popu- guaje, liderado por Guy Steele, se llamaría lares en la informática han sido Emacs y Common Lisp y era esencialmente un super- AutoCAD, pero no han sido los únicos: gimp, conjunto de los dialectos reemplazados. En gnucash, texmacs son aplicaciones intere- 1994, ANSI publicaba el estándar Common santes para las que nos será útil haber apren- Lisp, “ANSI X3.226-1994 Information dido lisp. Technology Programming Language Common La primera comunidad que se generó alre- Lisp”. En esos momentos el mercado que había dedor de software libre se generó alrededor entorno a Lisp ya era bastante pequeño, com- de Emacs y el primer proyecto de GNU fue parado con el de unos años atrás. GNU Emacs. No es un proyecto cualquiera, es Mientras eso ocurría un proyecto importante. Tened en cuenta anunció en 1983 el proyecto GNU, para que más del 90% de lo que hacemos cuando crear un nuevo sistema operativo libre. estamos delante del ordenador es editar Se puede automatizar trabajo en Puesto que lo que tendría que hacer el texto, así es que la herramienta con la que The Gimp gracias a scripts en Scheme Lisp. 90% del tiempo que empleara con la compu- hacerlo tiene que ser cómoda. tadora para llevar a cabo su proyecto sería Cuando Stallman creó el proyecto GNU se le originalmente propuso como una representa- editar texto decidió empezar creando un edi- pasó por la cabeza hacerlo todo con Lisp, pero ción interna. Por ejemplo, la M-expresssion tor llamado Emacs (editor de macros) y con por razones de eficiencia y dada la velocidad de car[cons[A,B]] es equivalente a la S-expression Emacs surgió Emacs Lisp, también conocido las máquinas de aquel entonces se decantó por (car (cons A B)). como elisp. De este modo, el primer progra- hacer las herramientas de bajo nivel en C. A Lisp fue originalmente implementado por ma libre fue desarrollado por una comunidad pesar de eso en GNU habría Lisp, y así fue. Steve Russell en un ordenador IBM 704 y los de programadores Lisp. En 1990 el editor y el Emacs tiene un pequeño núcleo escrito en dos lenguajes de macros para esta máquina compilador de GNU estaría completos. C; no obstante, todos los modos están escritos llegaron a ser las operaciones primitivas para En 1986 en el mundo del software privati- en Lisp y así cambiar el comportamiento de descomposición de listas: car (Contents of vo surge otro lenguaje específico de la aplica- cualquier cosa que estés haciendo en Emacs Address Register) y cdr (Contents of ción: AutoLisp (renombrado posteriormente significa evaluar Lisp, lo cual se hace de una Decrement Register). Los dialectos Lisp todavía como VisualLisp), un lenguaje para extender manera tan natural e integrada con el editor usan car y cdr para las operaciones que AutoCAD (un programa verdaderamente que a veces es incluso usando el ratón. devuelven el primer ítem de una lista y el resto extendido en ingeniería y arquitectura) y que De este modo, se pueden crear abreviaturas de la misma respectivamente. ha generado mucho código Lisp. para supercalifragilísticoespialidoso que es El primer compilador de Lisp completo y En 1995 en GNU están pensando en hacer una palabra larga que por una serie de razo- escrito en Lisp fue implementado en 1962 aplicaciones para el escritorio y les gustaría nes vas a tener que escribir muchas veces en por Tim Hart y Mike Levin. (AI Memo 39, 767 tener un lenguaje de programación para distintos documentos. También puedes crear- kB PDF (ftp://publications.ai.mit.edu/ai- poder escribirlas de un modo fácil y extensible te fácilmente una función Lisp para comentar publications/pdf/AIM-039.pdf)). Este compi- como en el editor de gnu, es decir, GNU el código de un lenguaje raro con el que vas a lador ya introducía el modelo Lisp de compi- Emacs. En ese momento TCL está sirviendo tener que programar durante unos meses y al lación incremental, en el que las funciones muy bien para ese propósito. A Richard que además te gustaría asociarle un atajo de compiladas e interpretadas pueden mezclar- Stallman no le gustó básicamente porque, teclado. Todo esto y muchísimo más es tan se libremente. aunque hereda algunas ideas de Lisp, TCL no sencillo como escribir y evaluar Lisp sin tener Desde su concepción, Lisp estaba estrecha- es Lisp y decidieron crear Scheme, el lenguaje que apagar el Emacs. Y cuando decimos sen- mente conectado con la comunidad investiga- de extensibilidad estándar para GNU. cillo es que es sencillo; Stallman comentaba dora en inteligencia artificial. En los años 70, No se eligió Common Lisp porque parecía que incluso administrativas acababan creando se empieza a comercializar la IA y el rendi- bastante largo y prefirieron algo más sencillo. programas Lisp debido a que nadie les decía miento de los sistemas Lisp existentes llega a La idea era tener un intérprete de Scheme que estaban programando, que les soluciona- cuestionarse seriamente, en parte debido a diseñado para ser enlazado dentro de aplica- ba problemas reales y que había una buena utilizar un recolector de basura y en parte por- ciones tal y como TCL lo hacía. El principal documentación integrada. Todo ello se debe a que, en su representación de estructuras beneficio de utilizar Scheme como lenguaje de que Lisp es un lenguaje interpretado que atrae internas, Lisp llega ser difícil de arrancar en el extensión primario sería porque debido a la a gente inteligente con gusto por hacer las limitado hardware de almacenamiento de sintaxis de Lisp es fácil traducir código Lisp a cosas bien. memoria de aquellos tiempos. Esto motiva la TCL, pero a la inversa no. Esto es debido a la AutoCAD es software privativo muy utiliza- creación de máquinas LISP: hardware de pro- idea de S-Expression de Lisp, una idea recien- do en el mundo de la arquitectura y la inge- pósito específico para arrancar entornos Lisp y temente reinventada con XML. Actualmente, niería. Como ya comentamos, lleva utilizando

MUNDO nº84 http://digital.revistasprofesionales.com 47 Linux 46-49 lisp.qxd 17/10/05 12:42 Página 48

Ciencia e investigación

Tabla 3. Lenguajes más utilizados en Debian

Lenguaje Debian 2.1 Debian 2.2 Debian 3.0 Debian 3.1 C 27.800.000 74.89% 40.900.000 69.12% 66.500.000 63.08% 130.847.000 57% C++ 2.800.000 7.57% 5.980.000 10.11% 13.000.000 12.39% 38.602.000 16.8% Shell 1.150.000 3.10% 2.710.000 4.59% 8.635.000 8.19% 20.763.000 9% Lisp 1.890.000 5.10% 3.200.000 5.41% 4.090.000 3.87% 6.919.000 3% Perl 774.000 2.09% 1.395.000 2.36% 3.199.000 3.03% 6.415.000 2.8% Python 211.000 0.57% 349.000 0.59% 1.459.000 1.38% 4.129.000 1.8% Fortran 735.000 1.98% 1.182.000 1.99% 1.939.000 1.84% 2.724.000 1.2%

Lisp como lenguaje de extensión desde 1986. lidad estos números lo único que quieren decir El problema real es el mismo que en la edición es la cantidad de proyectos que son aceptados de textos: al editar los planos de un edificio en Sourceforge. hay ciertas tareas que se vuelven repetitivas y En “Introducción al software libre” es bueno tener un lenguaje interpretado que (http://curso-sobre.berlios.de/introsobre/ las automatice. En las herramientas de CAD, sobre.html/index.html) podemos leer un estu- además estas operaciones repetitivas suelen dio bastante riguroso para entender la vitali- ser operaciones matemáticas. Las herramien- dad de un lenguaje en el mundo del software tas libres de CAD a veces incluyen otros len- libre. Éste se basa en tomar una distribución guajes de script Python, Perl o lenguajes pro- de software estable y ampliamente usada (por pios. Creemos que atraerían muchos usuarios ejemplo RedHat, FreeBSD o Debian) y contar de AutoCAD si además añadieran Lisp como líneas de código en los paquetes que vienen otro lenguaje de extensión. en la distribución. Gimp es otro proyecto importante en el Al contar proyectos Sourceforge no distin- GNU emacs es un magnífico entorno de programación en general y de Lisp mundo del software libre, la primera librería guimos entre un proyecto maduro y amplia- en particular. gráfica libre, gtk, se desarrolló alrededor de mente usado, como por ejemplo el kernel, de este proyecto. Gimp utilizó Scheme Lisp como un proyecto que acaba siendo una idea no da a que se usa en paquetes grandes e impor- lenguaje de extensión; de este modo, es fácil acabada; ambos cuentan como 1 y por ello tantes como Emacs o Gimp. crear scripts para automatizar la creación de eso es una mala estimación. Al contar páginas Podéis ver radiografías de otras distribucio- cosas como, por ejemplo, logos. registradas en un buscador pasa algo pareci- nes e incluso de proyectos concretos e impor- Y como último caso de estudio tenemos do: una cosa es que se escriban muchas pági- tantes en el “Curso de Introducción al GNU Cash. Se trata de un programa de conta- nas acerca de un lenguaje y otra cosa es que Software Libre” (http://curso-sobre.berlios.de/ bilidad que también usa Scheme como len- realmente se use el lenguaje. Tomar una distri- introsobre/) escrito por Jesús González guaje de extensión para importar ficheros QIF, bución de software y contar líneas de código Barahona, Joaquín Seoane Pascual y Gregorio generar informes y generar pop ups con el de proyectos empaquetados (con cierta Robles, a quienes se les agradece el buen tra- típico consejo del día. madurez) es una estimación bastante más bajo realizado. acertada acerca de qué lenguajes estamos Lisp en el mundo del software libre usando cuando usamos software libre. Lisp como lenguaje Ahora veamos, en la tabla 3, los resultados Lisp es injustamente un gran desconocido en Debian. para la inteligencia artificial especialmente en el mundo hispano e incluso Viendo estas estadísticas observamos que C La historia de la inteligencia artificial es larga y dentro del software libre. Ciertos análisis poco es el lenguaje mayoritario y seguirá siéndolo podemos remontarnos hasta la antigua Grecia rigurosos hacen parecer que Lisp es escasa- durante bastante tiempo. C++ está en auge para buscar sus orígenes. Sin embargo, el mente usado. Estos se basan en contar pági- (se triplica desde la última distribución). Shell momento en el que se comienza a utilizar el nas en Google o Yahoo, o buscar en se sigue duplicando y está siendo el tercer len- término y este se populariza es en 1956, cuan- Sourceforge o Savannah. guaje más usado. Lisp se mantiene como el do John McCarthy organiza el Dartmouth Veamos, en la tabla 1, el número de resulta- cuarto lenguaje más usado; sin embargo, su Summer Research Project on Artificial dos de buscar lisp, c++, java, python, tcl, perl y número de líneas de código no crece al ritmo Intelligence (http://www-formal.stanford.edu/ ruby en Google en agosto de 2005. que crecen otros lenguajes. Python es un len- jmc/history/dartmouth/dartmouth.html). Los Estas búsquedas han sido realizadas en guaje que lleva un crecimiento más exponen- años sucesivos a ese verano fueron especial- inglés, seguramente en castellano el panora- cial. Java es un lenguaje que empieza a consi- mente fructíferos: Newell, Simon y Shaw ma hubiera sido todavía más desolador para derarse dentro del mundo del software libre y escribirían el “Logic Theorist” (http://www.j- Lisp. No obstante, debemos considerar estos ya llega a las 3.679.000 líneas de código y se paine.org/students/tutorials/tute/node11.htm) resultados como un indicador de uso de los sitúa en el 1.6% del tamaño de Debian. y el “General Problem Solver” y John Mc lenguajes, no como el único indicador; una Tal vez se podría decir que hay una cierta Carthy crearía Lisp y escribiría el artículo cosa es que se hable mucho de un lenguaje y correlación entre los lenguajes que ocupan las “Programs with Common Sense”. otra distinta es que ese lenguaje se use primeras posiciones en Sourceforge y los len- Lisp era el lenguaje de alto nivel que nece- mucho. guajes que crecen más rápidamente. sitaban; fue el primer lenguaje en implemen- Ahora veamos, en la tabla 2, el número de Seguramente la buena posición de Lisp tar programación funcional, acercando las proyectos albergados en Sourceforge. En rea- dentro del mundo del software libre sea debi- matemáticas al lenguaje; permite entender el

MUNDO nº84 Linux 48 http://digital.revistasprofesionales.com 46-49 lisp.qxd 17/10/05 12:43 Página 49

Ciencia e investigación Lisp (I)

Tabla 4. Buscando un lenguaje para la IA en Google

Búsqueda Número de entradas c++ “artificial intelligence” 622.000 java “artificial intelligence” 581.000 lisp “artificial intelligence” 214.000 perl “artificial intelligence” 203.000 python “artificial intelligence” 184.000 prolog “artificial intelligence” 179.000

lenguaje hasta el nivel del intérprete y es System, basada en software con licencia GPL extensible, permitiendo crear nuevos paradig- pero utilizando Oracle como base de datos. La mas de programación en el lenguaje. idea de negocio era hacer desarrollos específi- Hasta 1971 no se inventaría Prolog, que se cos teniendo un toolkit para hacer desarrollos usaría sobre todo en combinación con Lisp, en rápidos en web. los sistemas basados en reglas, debido a sus Philip escribió un libro titulado “Philip and John McCarthy, creador de Lisp. facilidades para el encadenamiento hacia Alex’s Guide to Web Publishing” (http://philip. rosas que otros lenguajes no tienen, por ejem- atrás, entre otras cosas. greenspun.com/panda/), cuya lectura reco- plo, las macros de Lisp, de las cuales Graham Así es que históricamente Lisp ha estado miendamos a cualquiera que quiera desplegar hizo un buen uso. asociado a la inteligencia artificial y viceversa. un sitio web en , incluso si no preten- Con estas ideas en mente Esto se puede ver en la mayoría de la literatu- de ser programador. En el capítulo “Sites That empezó una pequeña empresa para crear ra existente acerca de inteligencia artificial. Y Are Really Programs” (http://philip.greenspun. tiendas on-line, que se llamó Viaweb. Hoy esa echando un vistazo a lo que se ha hecho y se com/panda/server-programming) describe los pequeña empresa es Yahoo Store y Paul sigue haciendo en los principales centros de lenguajes de programación que pueden ser Graham ganó 40 millones de dólares con la investigación: Carnigie Mellon, MIT o Stanford. interesantes para la web. Su opinión acerca de venta ¿gracias a Lisp? Él asegura que sí en los Resulta difícil hacer una estimación realista estos se puede resumir en la siguiente frase: documentos que escribió acerca del tema: de cuánto se usa Lisp en el mundo de la inte- “Un lenguaje de script es mejor que Java por- Beating the Averages ligencia artificial. Esto es debido a que mucho que no tiene que ser compilado. Un lenguaje (http://www.paulgraham.com/avg.html) del software escrito para inteligencia artificial de script puede ser mejor que Lisp porque la Lisp for Web-Based Applications es no libre. Peter Norvig comenta que hay una manipulación de cadenas es simple”. E ilustra- (http://www.paulgraham.com/lwba.html) tendencia de un cierto abandono de Lisp en la ba este hecho con 2 interesantes ejemplos de Revenge of the Nerds inteligencia artificial, dado el número de código: (http://www.paulgraham.com/icad.html) entradas al buscar $(lenguaje de programa- “posted by $email on $posting_date.” Lecturas desde luego muy interesantes para ción) + “artificial intelligence”. Veamos, en la quien planee desarrollar la próxima aplicación tabla 4, los resultados en agosto de 2005. (concatenate ‘string “posted by asesina de la web. Al igual que en el caso de Lisp, en el soft- “ email “ on “ posting-date) ware libre deberíamos interpretar no como El primer ejemplo de código serviría para Conclusiones que Lisp o Prolog no se usan dentro de la IA, tcl, perl, php... y el segundo para Common Lisp. sino que simplemente se habla mucho de esos La primitiva concatenate es mucho más abs- En este artículo se ha visto la evolución histó- lenguajes y inteligencia artificial en la web. tracta y poderosa, permitiéndo concatenar rica del lenguaje y se ha hecho un repaso a las De nuevo, aquí sería interesante poder secuencias de paquetes TCP, secuencias de áreas de aplicación del mismo haciendo un saber cuáles son los programas más usados de arrays tridimensionales... Pero si el 99,9% del especial énfasis en lo que al software libre y, inteligencia artificial y estudiar en qué lengua- trabajo va a ser concatenar texto el primer sis- en especial, GNU/Linux se refiere. jes están escritos. Los autores agradecemos tema es más cómodo. En la web los datos que El mes que viene se explicará cómo este len- sugerencias para poder realizar tales estudios. se manejan salen de bases datos y ficheros, guaje puede aprenderse en 10 minutos, expli- eso es, texto plano. cando la esencia del mismo. Esperamos que ¿Lisp en la web? Philip Greenspun tuvo éxito, su software, hayáis disfrutado con la lectura. actualmente es usado por importantes univer- Resulta incluso atrevido pensar que Lisp sidades e instituciones (http://dotlrn.org/part- pueda servir para programar la web. Para eso ners/) y hay un buen número de empresas están los lenguajes de script ¿no? :). Para escri- (http://openacs.org/community/companies/) bir esta sección hemos consultado los escritos que ofrecen: soporte, hosting, desarrollos, de dos programadores de Lisp con conclusio- etcétera. De hecho, él ya no participa en su nes contrarias; estos son Philip Greenspun y desarrollo. Prefiere aprender a pilotar helicóp- de Paul Graham. teros, ir a conciertos de jazz y dedicarse a sus Philip Greenspun había sido programador clases en el MIT. de Lisp en el MIT durante su juventud. En 1995 Paul Graham vio las cosas de manera dis- empieza a programar junto con Ben Adida y tinta. Para él la programación en la web es un Brian Tivol para crear sitios web. En 1998 tie- sitio donde puedes elegir el lenguaje que de- nen un montón de código reutilizable y lanzan sees y, si puedes elegir lo que quieras, ¿por qué una compañía: ArsDigita Communities no usar Lisp? Lisp tiene funcionalidades pode- En GNU Cash se usa Scheme como lenguaje de extensión.

MUNDO nº84 http://digital.revistasprofesionales.com 49 Linux