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.

"R2D2, ¿te lo dijo la computadora central de la ciudad? ¡R2D2, sabes bien que no debes confiar en una computadora extraña! "

- C3PO

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: , , , , ,

Recursos sobre IA.

Escrito en la categoría Conceptos de la IA

7 de Agosto del 2009

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.



Esta obra está bajo una licencia de Creative Commons.

Blog realizado por D4Rk0studio