inicio mail me! sindicaci;ón

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

Gravatar

jlt said,

March 17, 2007 @ 23:36

Lo cierto es que Lisp es lo que dices…y mucho más. Por ejemplo, el otro día escribí una función que permite realizar integrales definidas de funciones. Insisto que escribí una única función a la cual se le pasa como argumento la función de la cual quiero obtener su integral.

Por otro lado comentarte que Lisp si dispone de números enteros y números reales. Incluso dispone de números complejos que te permiten obtener, por ejemplo, la raiz cuadrada de -1.

Me gusta tanto el Lisp que llevo 6 años estudiándolo en mis ratos libres.

Espero que lo disfrutes.

José Luis Torre

Gravatar

PerkiPat said,

March 25, 2007 @ 20:34

Efectivamente, sí que soporta números de distintos tipos, al igual que existe el Common Lisp Object System (CLOS) que es una forma de añadir el paradigma objetual a Lisp.

Lisp es un lenguaje multi-enfoque, no se limita a la programación funcional.

Sin embargo, creo que es importante remarcar esas dos clases de datos: los átomos y las listas. Espero en breves colgar otro artículo por aquí introduciendo un poco el lenguaje, y continuando con la idea de ir enseñando lo que aprendo.

Saludos

RSS feed for comments on this post · TrackBack URI

Leave a Comment