The Artificial Conscience

Prepárate, siente, son las máquinas, están despertando...

Escucha, despierta... estás soñando, sueñas que las máquinas se están levantando. La consciencia artificial aún no se ha creado.

"Los ordenadores se hacen cada vez más inteligentes. Los científicos dicen que pronto ellos serán capaces de hablarnos (y con ‘ellos’ me refiero a los ordenadores, dudo mucho que los científicos sean capaces de hablarnos)"

- Dave Barry

Bienvenido a theartificialconscience.com

Scheme, dialecto de Lisp.

Escrito en la categoría Conceptos de la IA

15 de Agosto del 2009

En el post anterior, hablamos un poco de los dos dialectos más extendidos actualmente del lenguaje Lisp, un lenguaje que aporta bastantes funcionalidades interesantes a la hora de tratar con ciertos problemas de inteligencia artificial.

Los dos dialectos que comentamos son Common Lisp y Scheme. El primero es un estándar ANSI y tiene una larga colección de librerías estandarizadas, lo que hace de él un lenguaje apto para proyectos grandes. Scheme por su parte, se construye con una meta clara: la simplicidad y la funcionalidad. Se desarrolla con la intención de ofrecer las características principales de Lisp (por eso es un dialecto y no un lenguaje aparte), pero evitando librerías y demás “paja”. Esto hace de él un lenguaje muy interesante para experimentar y para aprender, y por eso es el lenguaje al que he decidido dedicar este post, puesto que aquí no vamos a embarcarnos en un proyecto grande. Simplemente quiero mostrar soporte y recursos sobre este lenguaje para que aquel que quiera, tenga un arranque más sencillo; además, de este modo si alguna vez decidimos implementar algo y utilizar para ello este lenguaje, pues tenemos una base.

Para comenzar, indicar el sitio oficial del lenguaje, en el que se ofrecen algunos links a otras páginas con recursos y software sobre Scheme. Esta página oficial se encuentra dentro del dominio csail.mit.edu. Como comentamos, el lenguaje fue desarrollado precisamente en esta universidad, el MIT, al igual que su padre, Lisp. Y más concretamente en el laboratorio de ciencias de la computación e inteligencia artificial (CSAIL).

Entre los links de recursos que merece la pena mencionar, se encuentra Schemers.org, el que supone, desde mi punto de vista, el punto de partida para aprender el lenguaje. Encontramos recursos de todo tipo, manuales, libros, así como software y una larga lista de implementaciones del lenguaje. Quiero aclarar que cuando hablo de implementaciones del lenguaje, me refiero a software capaz de compilar o interpretar el código Scheme para poder luego ejecutarlo.

La referencia oficial del lenguaje se va actualizando en esta página, donde podemos encontrar actualmente dicho documento, en formato pdf, de apenas 90 páginas (de ahí la simplicidad [que no facilidad necesariamente]). Esta referencia es asimismo el estándar de facto del lenguaje.

En cuanto al software, es decir, a las distintas implementaciones de Scheme, en Schemers.org ofrecen esta larga lista. A la hora de elegir una implementación con respecto a otra tenemos que atender a las distintas características que pueden estar ofreciéndonos, puesto que hay implementaciones que convierten el código Scheme en código bytecode de Java, o implementaciones que nos permiten empotrar código Scheme en Common Lisp (lo que tiene desde luego cierto interés)…

Además es importante tener claro qué versión de la referencia de Scheme implementa cada software. La actual es R6RS, pero podemos encontrar a día de hoy software que implementa perfectamente la versión R4RS. Las diferencias entre versiones suelen ser mínimas, pero es importante tenerlas claras a la hora de instalar un software y comenzar a desarrollar nuestros programas. El problema en este ámbito es que no existe ninguna implementación de referencia u oficial, y por ello debemos prestar especial atención a la hora de utilizar una implementación u otra, como hemos comentado.

Basándome en varios criterios distintos que comento a continuación (y una larga serie de infructuosas pruebas) me decido por recomendar Guile. Guile es un proyecto GNU (lo que siempre da ciertas garantías si está mantenido, como es el caso) que implementa el lenguaje Scheme, ofreciendo a su vez tres modos principales de uso. Cuando lo instalamos (sólo para sistemas Unix-like), podemos ejecutarlo en línea de comandos, e introducir directamente las sentencias Scheme que queramos, y Guile, que actúa de intérprete, nos dará las respuestas. Por otro lado, (el más cómodo para probar Scheme), podemos escribir scripts y ejecutarlos, del mismo modo que haríamos con un lenguaje de scripting como Bash o Perl, lo cual es realmente interesante. Y finalmente, y probablemente la característica estrella de esta implementación, es que nos permite utilizar Scheme como un lenguaje de extensión, proveyendo una librería con la funcionalidad de Scheme, que podremos integrar en un proyecto en C, por ejemplo, de modo que tenemos nuestra aplicación en C que en un momento dado hace uso de la funcionalidad que le da Scheme, lo cual lo hace extremadamente versátil.

Para finalizar, quiero dejar claro que existen muchas otras implementaciones que pueden ser igual de útiles a la hora de probar Scheme. Quizá la más directa sea la implementación que realizan en el propio MIT, MIT-Scheme; la razón por la que no es la que he elegido es porque actualmente tiene un bug sobre sistemas Debian-like que corran AppArmor. Mi caso es tal, y por ello era imposible utilizar tal implementación sin reconfigurar ciertos parámetros de mi sistema. De momento me gusta Guile, que es igualmente sencillo de instalar y de utilizar, y además tiene una muy buena documentación en la página.

scheme_shield

Ya por último, un interesante curso del OCW del MIT, en el que se utiliza Scheme como principal lenguaje, y que se basa en este libro, considerado como una joya, tanto para aprender Scheme, como para aprender los entresijos de la programación.


Etiquetas: , , , , ,


Esta obra está bajo una licencia de Creative Commons.

Blog realizado por D4Rk0studio