<$BlogRSDUrl$>

Pro·Log·[IR]

Programación Lógica y Recuperación de Información

«Algorithm = Logic + Control» Robert Kowalski (1979)

¡Importante! esta página hace uso de estilos recogidos en la especificación CSS2, no soportados por el navegador que está utilizando. Por favor, lea esta recomendación al respecto.

Archivo

Guardado por meses.

Enlaces

Los siguientes listados son una referencia a partir de la cual ampliar la búsqueda de sitios relacionados (i).

Bitácoras en castellano

Bitácoras en inglés

Directorios, metablogs

Programación lógica, Inteligencia Artificial, Recuperación de Información

Usabilidad, Arquitectura de la Información

Listas, foros, wikis

Matemáticas, ciencias

Miscelánea

Búsquedas

Búsqueda simple en varios de los motores más conocidos. Para mayor precisión, entrar en la página correspondiente e ir al apartado de búsqueda avanzada.

Búsqueda con Google
 

Búsqueda con Yahoo!
 

Búsqueda con AlltheWeb

Varios

Esta página traducida:

Traducción al catalán, internostrum; traducción al portugués, universia.

Reciba un aviso de nuevos comentarios (por Bloglet).


Agregue este sitio a su lector de "feeds" (sindicación mediante el sistema Atom).

Sobre este sitio

Espacio dedicado a la programación lógica y la recuperación de información, con una atención especial al lenguaje Prolog y otros lenguajes afines, pertenecientes al paradigma lógico y declarativo. También se tratará de hablar de estos temas desde la perspectiva de la Biblioteconomía y la Documentación.

En esta página

16.9.03

Programación de GUI's en Prolog: intérpretes para LOGO

En el anterior comentario, a propósito del módulo XPCE de SWI-Prolog, con el que es posible desarrollar aplicaciones gráficas para programas escritos en lenguaje Prolog, se mencionaba el editor "SWI-Prolog-Editor" y la aplicación "Graphical term-interpreter", escrita para proporcionar soporte gráfico a una determinada funcionalidad, en este caso la visualización de una estructura de datos en forma de árbol jerárquico.

Su autor, Gerhard Röhner, tiene otras dos herramientas, orientadas al manejo de programas escritos en lenguaje LOGO, utilizando el módulo XPCE para implementar el soporte gráfico (han de utilizarse por tanto bajo SWI-Prolog): "A turtle for Prolog" (Turtle-Komponente), programa que emula el comportamiento y características del lenguaje LOGO en Prolog, y "Scanner, Parser und Interpreter für Mini-Logo", compilador, parser e intérprete para dicho lenguaje, que convierte las líneas de código del programa escrito en LOGO en una representación en forma de listas anidadas, estructura de datos que es la que maneja Prolog para interpretar el programa. Esta representación o estructura se puede visualizar gráficamente mediante el programa "Graphical term-interpreter". "Turtle-Komponente" es la aplicación que proporciona la salida gráfica de la ejecución del código escrito en LOGO. El predicado que lanza la interfaz gráfica de salida, en una consola aparte, se indica tras el "prompt" de Prolog:

?- turtle_init.

La emulación del programa en LOGO se controla en este intérprete mediante una serie de términos predefinidos: turtle_draw(L), turtle_drawto(X,Y), turtle_turn(W), etc. Por ejemplo, la siguiente secuencia de términos, con sus correspondientes argumentos (en este caso 100, 120) separados por comas, dibuja en la pantalla de salida del intérprete un triángulo equilátero:

?- turtle_draw(100), turtle_turn(120), turtle_draw(100), turtle_turn(120), turtle_draw(100), turtle_turn(120).

La coma "," equivale en el lenguaje Prolog al operador lógico "and" (conjunción). El operador lógico "or" (disyunción), se representa mediante el símbolo punto y coma ";". Ambos símbolos se utilizan tanto para lanzar un objetivo compuesto por múltiples predicados o términos (secuencia de objetivos) en el "shell" del intérprete, como para la estructuración y el diseño lógico de reglas o cláusulas compuestas, por ejemplo:

a :- (b, c); d.

Se lee: "a" se satisface si se cumple "b" y d" o se cumple "d". El operador de disyunción ";" permite implementar en lenguaje Prolog estructuras del tipo if-then-else, cuya expresión más sencilla es "if A then B else C", y se escribe:

A :- B ; C.

Volviendo a las aplicaciones con las que se iniciaba este comentario, las páginas en las que se explica, someramente, su utilización, y desde las que se pueden descargar, están escritas en Alemán, pero con la ayuda de algunas capturas de pantalla, se entiende bastante bien su funcionamiento. Son en cualquier caso pequeños ejemplos del potencial de los programas realizables combinando el lenguaje Prolog con una librería gráfica, en este caso XPCE bajo SWI-Prolog.

Otra implementación del lenguaje LOGO en Prolog, utilizando SWI-Prolog y su módulo de programación gráfica XPCE, es ProLOGO. Se trata de una aplicación, escrita por Lorenzo Masetti y Luca Cinti (bajo la dirección del profesor Gianni Aguzzi, Universidad de Florencia), más potente y elaborada que la citada inicialmente. Las páginas web que dan soporte a esta aplicación están escritas en inglés y en italiano, e incluyen documentación de ayuda: un manual de usuario y descripción de los comandos básicos del programa. Para descargar la aplicación entrar en el apartado ProLOGO Home in Sourceforge.net. Sin embargo, sus autores advierten:

"ProLOGO is not a complete LOGO language because there's no procedures implementation. We hope someone will help us to develop the project."

Los avisos "Singleton variables..." que aparecen al compilar el programa, se pueden evitar anteponiendo un guión bajo "_" a cada una de las variables indicadas por el intérprete, en el código fuente del programa. Estos avisos advierten de la presencia de una variable aislada en una determinada cláusula del programa, bien en su cabeza (parte que está antes del símbolo condicional ":-") o bien en el cuerpo (parte que está detrás de referido símbolo, y que contiene las condiciones que han de cumplirse para verificar la cabeza de la cláusula, y que se produzca la instanciación de las variables).

El guión bajo sirve para representar en lenguaje Prolog una "variable anónima". Estas variables pueden aparecer en determinadas cláusulas del código fuente del programa por una cuestión procedimental, ya que pueden ser necesarias para verificar una relación, pero su estado de unificación no interesa como valor de salida. Si figuran varias variables anónimas en una misma cláusula, el intérprete las trata como variables distintas. El compilador avisa de esta circunstancia porque en determinadas situaciones puede denotar un fallo de programación, aunque generalmente la presencia de estas variables no supone que el código sea incorrecto. Se trata en todo caso de una falta de elegancia a la hora de implementarlo, en aquellos casos en los que la presencia de una de estas variables no sea estrictamente necesaria.

El entorno de desarrollo SICStus Prolog ("Swedish Institute of Computer Science"), incorpora, al igual que SWI-Prolog, un módulo de desarrollo de interfaces gráficos de usuario (GUI), que funciona gracias a la incorporación de una librería basada en Tcl/Tk [1] [2]. SICStus Prolog permite dos modos de ejecución: el primero, "iso mode" cumple estrictamente la norma ISO/IEC 13211-1 (1995) que estandariza el lenguaje Prolog a nivel internacional. En el segundo modo de trabajo, "sicstus mode", se añaden extensiones que dotan a este intérprete de mayor potencia y capacidad de interacción con otros lenguajes. A diferencia de SWI-Prolog no se trata de un programa de uso libre, incluso en el caso de fines educacionales, si bien existe una versión de evaluación.

Tcl/Tk es un paquete que incluye el lenguaje de script, interpretado y multiplataforma Tcl, similar a otros lenguajes para el "shell" de UNIX, y la extensión Tk, que añade comandos especiales para la creación de elementos gráficos o widgets bajo Windows y Macintosh. Tcl/Tk, desarrollado inicialmente para crear interfaces gráficos en el S.O. UNIX, es muy utilizado actualmente en la integración y desarrollo de aplicaciones comerciales para Internet, y permite la interoperatividad con código y aplicaciones escritas en C/C++ y Perl. Más información sobre este lenguaje:

Los programas escritos para ser ejecutados bajo SICStus Prolog, y dotados de interfaz gráfica mediante la librería Tcl/Tk, están formados por varios archivos: un primer archivo con extensión ".tcl", que es el que contiene las instrucciones escritas en Tcl/Tk para dibujar en pantalla los elementos gráficos del programa, y al menos un segundo archivo, con la extensión habitual ".pl", que es el que contiene la base de conocimiento y las reglas de inferencia escritas en Prolog. Lógicamente existen instrucciones encargadas de conectar ambas "partes", y de pasar al módulo Tcl/Tk los parámetros resultantes del proceso de inferencia realizado por el módulo del programa escrito en Prolog, instrucciones predefinidas que incorpora SICStus Prolog como parte de su distribución.

En esta dirección encontramos un ejemplo de lo expuesto: se trata de un intérprete para LOGO escrito en Prolog, dotado de interfaz gráfica mediante la referida librería Tcl/Tk de SICStus Prolog. Por desgracia no viene acompañado de ningún documento de ayuda que explique en detalle su funcionamiento y uso, pero el código está comentado, lo cual sirve de cierta orientación.

Al margen de Prolog, existe en PHP una clase (escoger un sitio espejo) que funciona como un intérprete para LOGO. Existe una demostración on-line de este "script" que permite cargar, por medio de un formulario, un programa escrito en este lenguaje de programación. La salida gráfica del resultado de la ejecución del programa, se implementa mediante un objeto Flash integrado en la página de demostración.

El lenguaje LOGO fue desarrollado a finales de la década de los años 60 del pasado siglo por el matemático y científico cognitivo Seymour Papert [1] [2], y otros colegas de profesión, en el MIT, como un dialecto derivado del lenguaje Lisp. Orientado al aprendizaje y al desarrollo cognitivo en el contexto de la enseñanza infantil, como tal dialecto de Lisp sus estructuras de datos se basan en palabras y listas, lo cual lo hace muy adecuado, entre otras cosas, para el manejo básico del lenguaje natural. De hecho su sintaxis y su modo de programación se aproximan mucho a una expresión simplificada del lenguaje natural, casi una especie de pseudocódigo.

Seymour Papert, discípulo del lógico y estudioso de la psicología cognitiva Jean Piaget, con el que trabajo en la Universidad de Ginebra a finales de los años 50 y principios de los 60 (siglo XX), es considerado junto con Marvin Minsky, por citar solo dos nombres relevantes, uno de los pioneros de la Inteligencia Artificial y de la ciencia cognitiva. Papert y Minsky son coautores de un libro clave en la evolución de los estudios cognitivos y la Inteligencia Artificial: "Perceptrons" (1969). En la página Celebrities in Cognitive Science Martin Ryder mantiene una colección de enlaces relacionados con la actividad de los principales científicos y estudiosos de la ciencia cognitiva y la filosofía del pensamiento. En relación con la ciencia cognitiva ver, a modo de introducción, el siguiente texto, basado en la obra "Conocer" de Francisco J. Varela, sobre el desarrollo de esta disciplina, publicado en el "weblog" Epistemología de la Comunicación.

Gran parte de las ideas implementadas por Papert en el lenguaje LOGO recogen y se inspiran en las aportaciones de Piaget al campo de la psicología cognitiva y el aprendizaje infantil, y se nota en este sentido la gran influencia que el trabajo y la metodología del científico suizo supusieron sobre el primero, tras el referido periodo de trabajo en común. La gran orientación que el lenguaje LOGO tiene hacia la enseñanza de las matemáticas y la geometría, se debe a la preocupación que en este sentido manifestaba Papert, al constatar las dificultades que este campo del conocimiento presentaba en el correcto aprendizaje de los alumnos.

LOGO es un lenguaje interpretado, muy utilizado en el desarrollo de simulaciones, por ejemplo, para la enseñanza de las formas espaciales básicas y de la geometría en particular, orientado esencialmente a la educación infantil y la introducción de conceptos básicos de programación en este tramo educativo, si bien desde la década de los años 80 (siglo XX) han surgido numerosas versiones e implementaciones que tratan de dotar a este lenguaje de mayor potencia, y abarcar un abanico más amplio de posibles aplicaciones prácticas. Su logotipo característico es una tortuga, ya que uno de los primeros programas que se desarrollaron con este lenguaje simulaba el movimiento de un robot con forma de este animal. El sitio web de la Fundación LOGO del MIT constituye un inmejorable punto de partida para introducirse en el conocimiento de este lenguaje, y obtener más información, ya que recoge numerosos recursos y referencias: introducciones, trabajos y ensayos sobre la materia, enlaces, bibliografía y otras referencias, noticias, etc.

En todo caso no es el propósito de este comentario ofrecer una visión exhaustiva del lenguaje LOGO. En Internet existen buenas referencias sobre el particular, y por citar alguna en castellano, el portal El Macromundo de LOGO ofrece recursos muy interesantes: documentos, enlaces, revista "LOGO información", foro, talleres de programación, etc. Se relacionan a continuación otros puntos de interés:

Artículos, manuales y monografías:

Directorios de recursos y portales:

Dentro de los numerosos intérpretes existentes para este lenguaje, por ejemplo StarLogo, Win-Logo, etc., generalmente programas comerciales (en los portales y páginas arriba referenciados se puede obtener más información al respecto), es interesante destacar por su sencillez el intérprete Berkeley Logo (UCBLogo), de uso libre, desarrollado en la Universidad de Berkeley (California) por Brian Harvey y sus alumnos (ver también: "Berkeley Logo User Manual"). Existe una versión más desarrollada y potente, MSW Logo, exclusivamente para Windows (ver también: "An Introduction to MSW Logo"). Desde la página se puede acceder a una serie de interesantes enlaces referidos al lenguaje LOGO. Por otra parte, PyLogo es un intérprete para LOGO escrito en Python, basado en UCBLogo.

[0] comentarios | # | lista |


Pro·Log·[IR],

Publicación: Blogger | Estadísticas: eXTReMe Tracking

Se recomienda ver este sitio con Mozilla 1+, Firefox 0.8+ ó Netscape 7+. Si no queda más remedio, con IE 6+. Si lo desea, comunique cualquier problema al respecto. También será bien recibida cualquier sugerencia sobre el contenido. La fuente de letra preferente es Georgia. Se prohibe la utilización del diseño de la página salvo autorización expresa del autor. Los contenidos escritos son de uso libre, siempre que se cite la fuente.