Infinite scrolling

Lots of Stupid and Inecesary Parenthesis a.k.a. LISP

Hace unos años, mientras estaba más o menos en quinto semestre me quejaba ante un profesor (con quien más tarde sería coautor de algunos artículos) de lo frustrante que eran en general los lenguajes de programación ya que siempre el cómo se sobreponía al qué, e.d. si quería programar el quick sort tenía que pelar con índices y todo tipo de cosas antes de verlo funcionar (por cierto, en Haskell esto toma 3 líneas de código). El caso es que en ese momento el profesor me recomendó que revisara lo que se conoce como lenguajes funcionales y de hecho me recomendó uno llamado scheme (que hasta donde se, es el lenguaje en que se programó el TOL).

El punto fue que conseguir documentación sobre scheme no fue tarea fácil, pero en esos días apareció un amigo que sabía bastante bien Common Lisp (y de hecho sabe casi de cualquier cosa de ciencias de la computación) así que mis clases de Lisp se llevaban a cabo a traves de IM en las noches de 10pm a 2am (que geek verdad?) hasta que mi compañero se enfermó y hasta ahí llegó todo. Despues me di a la tarea de buscar libros sobre el lenguaje ya que este me había gustado mucho. El problema con estos libros es que partían del hecho que uno no sabía programar, como en el caso de Common Lisp: A gentle introduction to Symbolic Computation o que uno ya era un experto en Lisp, como On Lisp. El caso es que esto me hizo desviar de mi idea de dominar este lenguaje durante mucho tiempo.

A finales de mi carrera, durante el curso de computación evolutiva, Lisp apareció en escena nuevamente. Esta vez tenía que ver con un área de la computación evolutiva conocida como programación genética en la cual John Koza quien fue quien inventó la rama usa solo Lisp y de hecho todos los framworks que involucran programación genética se valen de una u otra forma de las s-expressions y hasta copian la manera en que Lisp muestra los resultados (+ (* 3 x) y (/ x 0.5)). En ese momento recordé lo mucho que me gustaba el lenguaje y afortunadamente tuve acceso a un buen libro de Scheme, pero como las cosas buenas no duran tanto, por mi tesis jamás tuve tiempo de leer el libro.

En el último semestre de la carrera vi una materia que se llamaba Seminario de programación avanzada. Aunque realmente el curso fue peor de lo que sonaba; los temas cubiertos fueron: buenas técnicas de programación, Aspectos y Programación Funcional; solo el último tópico llamó mi atención. Aunque el lenguaje que manejamos fue Haskell, para este si conte con un buen libro y realmente logré hacer cosas interesantes como un analizador sintáctico para un muy pequeño lenguaje procedminetal del cual lamento haber perdido el código y también fue muy útil en un seminario sobre correctitud de programas. El caso es que la universidad terminó y los lenguajes funcionales quedaron en segundo plano.

¿Pero a que viene todo este cuento? se preguntaran ustedes. Pues la verdad es que hace poco me encontré con un muy buen libro llamado "Practical Common Lisp." Lo que más me agrada de este, es que parte del hecho que el lector tiene algo de experiencia programando, ya sea en Python, C, C++, Java, Perl, etc. y a partir de esa suposición, plantea el resto del libro. La verdad, he avanzado mucho en Common Lisp tanto que ya tengo en mi cabeza un framework para algortimos geneticos y según mi diseño, en lisp tomará muchas menos líneas de código. Solo espero tener tiempo de sentarme a desarrollarlo. Si lo logro, ciertamente lo publicaré para alentar a otros a que aprendan este lenguaje que es muy entretenido.

Por cierto, el titulo es una conocida broma hacerca del lenguaje, ya que en este todos son listas que se representan con parentesis, y al final uno tiene cientos sino miles de ellos... y no me aguanté las ganas de ponerlo como título de este post ;).

No comments:

Post a Comment