inicio mail me! sindicaci;ón

Archive for Lisp

Lisp, un vistazo previo

Siguiendo la idea de MD con Python de que quien enseña aprende dos veces voy a hablar un poco de Lisp, más que nada para ir comentando lo que voy aprendiendo. De momento, hablaré durante unos párrafos sobre los inicios de Lisp y qué lo caracteriza.

Lisp es un lenguaje ideado desde el verano de 1956 hasta el de 1958 e implementado a partir de ese año por John McCarthy. Obtuvo sus ideas tras haberse centrado durante toda la década de los 50 en los trabajos de Alonzo Church[1], en especial en el cálculo lambda. A lo largo de su carrera se dedicó mayoritariamente a la inteligencia artificial, por lo que el lenguaje quedó muy ligado a esos entornos académicos.

Es un lenguaje declarativo, a diferencia de lenguajes imperativos como C, Pascal o Basic, o los orientados a objetos como Java, Smalltalk, C# o C++, que son los que clásicamente son conocidos por todos los informáticos y los [únicos] que se enseñan en las carreras universitarias o en los módulos de formación profesional (al menos los que yo conozco). En cuanto a historia de los lenguajes de programación: es el segundo lenguaje de alto nivel y el primero declarativo, posterior a Fortran que data de noviembre de 1954 cuyo primer manual salió en 1956.

Los lenguajes declarativos, a diferencia de los imperativos requieren que uno exprese qué es lo que quiere conseguir, y no cómo lo quiere conseguir. El primer acercamiento que he tenido en la carrera a los lenguajes declarativos ha sido en la asignatura de Diseño de Bases de Datos donde entre los lenguajes de manipulación de datos (DML, en inglés, frente a los DDL: lenguajes de definición de datos) que se utilizan en los sistemas gestores de bases de datos (SGDB) a nivel histórico diferenciamos entre los procedurales de los primeros sistemas y los declarativos (como p.ej. SQL) de los sistemas actuales.

SQL como lenguaje declarativo que es no requiere indicarle al SGBD de dónde tiene que tomar los datos, sino directamente qué datos debe tomar:

SELECT * FROM alumnos WHERE nombre=’pepito’;

En esa sentencia SQL observamos que se están pidiendo todas las tuplas de la relación alumnos cuyo atributo llamado nombre es igual a pepito. No se indica en nigún momento a qué fichero debe ir el SGBD a buscar tales tuplas, ni en dónde se almacenan las tablas, si en un disco duro o en otro, en un ordenador o en otro, en un sector o en otro, etc. Eso es trabajo para el SGBD[2].

Posteriormente se han desarrollado un gran número de dialectos de Lisp, a partir del dialecto original, como p.ej. el Emacs Lisp, el Common Lisp, GNU Common Lisp o Scheme. GNU Emacs es un potente editor de texto con un núcleo escrito en C y un gran número de extensiones escritas en su propio dialecto de Lisp (el Emacs Lisp, obviamente), y es habitual que sus usuarios tengan cierta relación con el lisp que allí se usa ya que permite un alto nivel de configurabilidad del procesador de textos, ya sea para programar en una gran variedad de lenguajes, para llevar una agenda, para escribir documentación en LaTex, DocBook, XHTML o texto plano, entre otros muchos usos.

Indica Eric S. Raymond en su ensayo Cómo llegar a ser un hacker, al igual que mucha otra gente (a decir verdad casi todos los que han aprendido Lisp), que aprender Lisp otorga una nueva forma muy superior de ver las cosas, prepara la mente para enfocar los problemas computacionales desde otro ángulo, y en general, aunque Lisp no se vaya a usar en la vida real, es conveniente aprenderlo para ser un buen programador. Comentarios similares se pueden leer de Paul Graham[3].

Lisp viene de List Processor, y parte de la magia del lenguaje viene de que trata como una lista tanto el código como los datos. Para lisp no son cosas diferentes, puedes trabajar con un cacho de código como si fueran datos con los que tratar y modificar, lo que facilita la metaprogramación. De hecho, en lisp sólo hay dos tipos de datos: los átomos y las listas (listas de átomos o de otras listas), lo que entre otras cosas facilita bastante el desarrollo de intérpretes de lisp.

Bibliografía:

  1. La nueva mente del emperador, Roger Penrose
  2. Fundamentos de Bases de Datos, Silberschatz, A., Korth, H. F., Sudarshan, S.; McGraw-Hill; 2006
  3. Hacker and Painters, Paul Graham

Hackers and Painters: Essays on the Art of Programming

Otro libro de los que pedí hace poco a Amazon.co.uk. Su autor es Paul Graham, desarrollador en su día de Viaweb, una startup que facilitaba la venta online a terceros y que fue adquirida por Yahoo! algunos años después de crearla. Así mismo, también es autor de un serie de ensayos de cierto interés, entre ellos destacaré How to start up a Startup, aunque en su página podéis encontrar unos cuantos, varios de ellos también se encuentran en el libro. El libro en sí es una recopilación de estos ensayos, no con necesaria continuidad entre ellos: se pueden leer por separado, según el interés que susciten.

Aunque habla de por qué los nerds son aptos para meterse en un fregao como es una startup –no siempre–, de cómo se debe montar una, de cómo funcionan, en fin… de startups, también habla a partir del décimo ensayo hasta el decimo cuarto y penúltimo de lenguajes de programación. Particularmente hace una apología de Lisp, cosa que ya sabía tras leer varios comentarios sobre él en la web, y ver que tiene publicado un libro titulado The ANSI Common Lisp Book.

Sólo leer esos cuatro ensayos me han dado suficiente gusanillo para ir eligiendo algún manual para aprender ese lenguaje. Veremos si tras acabar los exámenes de julio dispongo de tiempo para ello.