Desde hace algunas semanas estoy aprendiendo Lisp. Estoy bien cómodo programando en Python, y he aprendido bastante dando clases de Java. Pero Lisp tiene algunas cosas que no tienen esos lenguajes (y ningún otro, al parecer), y que me interesa aprender, en particular la capacidad de extender la sintaxis del lenguaje como práctica habitual de programación. Esto en Lisp se llama Macros, y no tienen nada que ver con los macros como se entienden en C/C++. Como siempre, hay que sacar tiempo de donde no hay, así que estoy yendo más lento de lo que quisiera.
Los ensayos de Paul Graham son muy buenos y sugerentes, y el libro Hackers and Painters tampoco tiene pierde. Obviamente no quiere decir que coincida 100% con lo que dice, pero habla bastante de Lisp, por no decir que está absolutamente entusiasmado con Lisp.
Estoy usando dos libros: Practical Common Lisp, de Peter Siebel, que se puede descargar sin costo del website de APress. Y ANSI Common Lisp, de Paul Graham, que compré en Amazon.
Menos bla,bla,bla, quiero empezar a escribir programas…
Primera tarea, instalar alguna versión de lisp en la computadora. En Ubuntu:
$ sudo apt-get install clisp clisp-doc
Ya tenemos lisp en la computadora. Ahora basta escribir:
$ clisp

Practical Common Lisp recomienda usar Emacs como editor de texto/entorno de desarrollo y la extensión SLIME (Superior Lisp Interaction Mode for Emacs). (Más información sobre Emacs, ver Wikipedia.) Por ahora voy a seguir los consejos del libro, así que a instalar Emacs y Slime.
Intenté usar la versión de Emacs que está en los repositorios de Ubuntu, y que se integra con Gnome. Pero las letras en la pantalla se veían francamente horribles. Creo que la pantalla del Macro Assembler que tenía en la Atari 800XL que usaba en el siglo 20 se veía mejor. Bien, siempre hay soluciones. Buscando en Google “pretty emacs”, encontré esta página, donde se explica cómo instalar una versión de Emacs más reciente, compilada para que haga un render decente de los fonts. En la imagen se puede ver el resultado.
Segundo paso, aprender lo suficiente de Emacs como para crear un programa, guardarlo en un archivo y compilarlo. Emacs tiene fama de ser poco amigable, y lo es. En este post Erik Rasmussen explica con gracia cómo al comienzo no se explicaba por qué si Lisp es un lenguaje superior e increíble, es tan poco usado. Al menos eso es lo que se preguntaba él hasta que intentó usar Emacs.
El némesis de Emacs es vim, otro editor muy común en Linux. vim es poderoso. He desarrollado websites enteros usando vim. Incluso cuando estoy usando un procesador de texto me sorprendo a veces teclando “:w”, que es el comando de vim para guardar el archivo. Pero la verdad que entre perder tiempo tratando de que Lisp y vim se entendieran, preferí dedicar veinte minutos a seguir el tutorial de que trae el mismo Emacs. (Se accede al tutorial presionando Ctrl-h t. O, como dicen en Emacs, C-h t.) Y confirmado: veinte minutos bastan para empezar y moverse en Emacs.
Uno de los comentarios del post de Rasmussen dice que hay un plugin de lisp para Eclipse: más adelante le daremos una oportunidad.
Tercer y último paso, instalar SLIME. Slime es un entorno de desarrollo para programar en Lisp dentro de Emacs. En Ubuntu se puede instalar escribiendo:
$ sudo apt-get install slime
Como se explica aquí, también es necesario añadir lo siguiente al archivo ~/.emacs:
(setq inferior-lisp-program “/usr/bin/clisp”)
(add-to-list ‘load-path “/usr/share/emacs-snapshot/site-list/slime”)
(require ‘slime)
(slime-setup)
Listo. Ahora sí, en Emacs: M-x slime, y aparece SLIME.
Y podemos escribir: (hello-world).

{ 4 comments… read them below or add one }
Buen artículo. ¿Empezaste con lisp antes de leer lo mío o después? De momento, estoy dominando los resultados por la busqueda “emacs frustration”.
Bueno, que tengas buena suerte “lispeando”.
Erik:
Empecé antes. Pero no he tenido mucho tiempo, de modo que recién hace unas semanas he podido retomar el tema… y me encontré con tu post.
Bueno, pues gracias por el enlace. Encontrar el tiempo es la parte más dificil.
Os recomiendo que utilizeis el compilador SBCL, es mucho mejor que CLISP. O si teneis pasta pillaros el Allegro CL jeje