En el pasado post comenté un poco algunos de los lenguajes utilizados para tareas relacionadas con la inteligencia artificial. Hablé de Lisp, un lenguaje creado expresamente para tal fin, que data ya de hace bastante, está muy testado y sigue ahí, ya que los resultados que podemos conseguir con él son bastante beneficiosos en muchos casos.
Hoy vamos a ver un poco más en profundidad algunas cosas que es necesario conocer a priori de este lenguaje, para aquellos que quieran probarlo por su cuenta. Además al final voy a colocar algunas referencias a sitios donde podemos aprender más sobre este lenguaje y todo lo que le rodea.
Para empezar, Lisp es el segundo lenguaje de alto nivel más antiguo de los existentes (Fortran es el primero), y este hecho es el que genera precisamente la variedad de implementaciones de Lisp que podemos encontrar hoy día. Digo implementaciones porque realmente existen “dialectos” del lenguaje, que han ido desarrollándose para cumplir ciertos objetivos a lo largo del tiempo, adaptaciones que han ido haciéndose y que en algunos casos se han extendido. Me parece que es una buena idea conocer un poco de qué van estos dialectos para saber por dónde empezar; si bien es cierto que una vez que dominemos uno, los cambios son más bien escasos, simplemente algunas reglas a tener en cuenta y quizá algunas partes de la sintaxis.
Alguna vez hemos hablado de las máquinas Lisp, unos dispositivos usados en la década de los 80 cuyo hardware estaba preparado específicamente para ejecutar código Lisp, haciendo los programas implementados en este lenguaje mucho más veloces y eficientes. Esto no escaló demasiado, y no tardaron en comenzar a surgir los compiladores de Lisp para máquinas de propósito general, que son los que podemos utilizar nosotros para desarrollar y los que impulsaron el lenguaje cuando la IA atravesaba uno de sus inviernos.
Los dos dialectos más conocidos y extendidos de Lisp son Common Lisp y Scheme, de hecho si queremos probar este lenguaje, lo mejor será que escojamos entre alguno de estos dos dialectos, pues son las implementaciones más utilizadas a día de hoy y las que quizá tengan más soporte actualmente.
Sobre Common Lisp (CL) merece la pena destacar que es un estándar ANSI, que surgió para estandarizar y aunar las innumerables implementaciones distintas de Lisp que había en ese momento. Podemos encontrar herramientas de software libre para poder desarrollar utilizando este lenguaje. Indicar además que existen diversidad de librerías para CL lo que lo hace quizá el más cómodo de utilizar si queremos embarcarnos en un proyecto grande.
Scheme por otro lado busca la sencillez, es un dialecto muy versátil que si bien mantiene todos los principios de la programación en Lisp, restringe algunas características que podemos encontrar en CL, y sigue una filosofía minimalista. Además no dispone del amplio número de librerias de CL. Posiblemente para empezar sea un lenguaje más cómodo que CL, porque aprenderemos con él lo básico y si en un futuro necesitamos librerías más amplias, pues tenemos CL. Además debido a las similitudes, el cambio nos será prácticamente transparente. Scheme es de hecho un lenguaje muy utilizado en universidades para enseñar los distintos paradigmas de programación, ya que pese a su sencillez mantiene una alta versatilidad en este sentido, y simplifica bastante la labor.
A continuación os dejo algunas referencias para que echéis un vistazo, y en el próximo post volvemos al tema.
- CL:
Manual: Common Lisp the Language, 2nd Edition, escrito por Guy L. Steele Jr.
Otra versión del mismo, aquí.
- Scheme:
El documento oficial (unas 90 pags.)
La casa de Scheme, en el MIT, con software, y documentación varia.
Lo dicho, que esto se alarga.
