<$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

27.9.03

Proxy-caché y actualización de páginas: un remedio

Dados los evidentes problemas que ocasiona el proxy-caché puesto en servicio por Telefónica y su semi-subsidiaria Terra a principios de año, al menos en lo que a la actualización de las páginas que visitamos se refiere, es más que recomendable la instalación del programa Pasakche. Se trata de una pequeña aplicación de apenas 30 Kb, distribuida por la Asociación de Internautas, que una vez "instalada" se carga al encender el ordenador y "obliga" al referido sistema de copia-caché a proporcionar la página solicitada, directamente desde el servidor de origen. De esta forma tenemos plena garantía de leer la versión actual, y no la copia guardada hace "X" tiempo en los ordenadores de Telefónica...

Entrecomillo lo de la instalación porque, una vez descargado el programa, únicamente es necesario ejecutarlo desde su ubicación y habilitar la casilla para que se cargue automáticamente al iniciar Windows (solo está disponible para este S.O., desconozco si existe algún programa parecido para Linux, Mac, etc., que sirva para estos propósitos, por lo que cualquier comentario al respecto será bien recibido). Por lo demás consume muy pocos recursos de memoria (por no decir prácticamente nulos) y su efectividad es absoluta. Por experiencia propia puedo confirmar, que a día de hoy, si visitamos determinadas páginas sin este programa, Terra en mi caso sirve las versiones actualizadas... en agosto... sin comentarios. El funcionamiento de este programa está perfectamente explicado en la correspondiente página.

Por otra parte, se podría argumentar que para obviar los problemas que presenta el proxy-caché en cuanto a la obtención de páginas actualizadas, bastaría con añadir en la cabecera de los documentos HTML las siguientes etiquetas meta:

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />

Sin embargo este procedimiento parece no funcionar, y el proxy-caché de Telefónica sigue descargando las páginas almacenadas en sus equipos, lo cual, por poner un ejemplo, se ha comprobado con la plantilla de este sitio. Actualizada en Blogger, se sigue visualizando la antigua si se hace desde un ordenador en el que no esté instalado Pasakche, aun cuando presionemos la combinación de teclas Ctrl+F5 para actualizar la vista en el navegador.

Los sistemas proxy-caché, además de plantear problemas en lo que a la actualización de las páginas demandadas se refiere, pueden tener, al igual que cualquier otro sistema de navegación que pase a través de un "proxy", una notable incidencia en las estadísticas de visitas de un sitio:

"No sabemos cuantas personas hay detrás de cada proxy. Todos los usuarios que se conectan a través del mismo proxy (grandes empresas o instituciones) quedan registradas en los logs como un único visitante."

"Por otro lado, dependiendo del intervalo de tiempo estipulado entre dos visitas al mismo sitio, una única persona puede ser considerado como uno sólo o como dos visitantes únicos."

Jesus M. Gonzalez-Barahona es autor de un artículo de lectura más que recomendable sobre las implicaciones y la problemática que presentan para los usuarios finales los sistemas de proxy-caché transparente (no requieren configurar ninguna aplicación del lado del cliente para que el tráfico sea atendido por el proxy), "¿Nos están tomando el pelo con las proxis transparentes?", publicado originalmente en la revista Todo Linux.

Este tema quería haberlo comentado hace bastantes semanas, antes del mes de agosto, ya que el referido programa "anti proxy-caché" fue anunciado en la segunda mitad de julio, pero lo he ido dejando hasta que me lo ha refrescado la lectura de un "post" publicado en Trasteando, bitácora de reciente aparición, y como es justo reconocerlo, dicho está.

Por cierto, para comprobar si nuestra conexión está pasando a través de un proxy transparente, procedimiento al parecer utilizado también por otras operadoras además de Telefónica y Terra, la Asociación de Internautas dispone de un sencillo test que funciona simplemente presionando un enlace.

[0] comentarios | # | lista |

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 |

4.9.03

¿Por qué no usa Prolog más gente?

Es una buena pregunta, planteada por Mark Watson en su Weblog, de la que se hacen eco en Lambda the Ultimate (ver el apartado logic/declarative). A modo de reflexión sobre este (hasta cierto punto injustificado) hecho, el autor reseñado hace referencia al intérprete SWI-Prolog, del que menciona varias de sus virtudes. A este respecto, creo correcto afirmar que se equivoca quien necesariamente asocie Prolog con un entorno poco amigable, en modo "línea de comandos", al menos en lo que se refiere a las últimas versiones de los principales intérpretes y entornos de desarrollo para este lenguaje de programación lógica [1] [2]. Así por ejemplo, XPCE permite dotar de capacidades gráficas a los programas escritos para SWI-Prolog:

"XPCE has been developed for GUI development in Prolog from the start. XPCE has a dynamically typed object-oriented kernel. Methods can be defined in any language. XPCE predefines a large number of classes, aiming at data-representation as well as graphics. The graphical library allows for abstract description of interface components and is portable to Win32 and Unix/X11."

"Using XPCE, interactive Prolog applications can be written completely in Prolog. XPCE can be used for (space-)efficient storage of objects and object-oriented structuring of your application. As of XPCE-5, native Prolog-data can be passed and stored with XPCE/Prolog defined classes."

Una vez instalada la versión adecuada de SWI-Prolog en el ordenador, se puede consultar un manual sobre XPCE si se accede al ítem "Help" del menú de opciones de la parte superior de la ventana del programa.

Help --> XPCE (GUI) Manual

En la subventana que se abre, encontramos la opción "File", a través de la cual se localizan una serie de programas y ejemplos de demostración:

File --> Demo programs

Por citar otro ejemplo de programa dotado de interface gráfica mediante XPCE, mencionar que Gerhard Röhner es autor de una pequeña aplicación, "A graphical term-interpreter" (zeichneterm.pl), que permite dibujar gráficamente en pantalla, en forma de árbol jerárquico, un término escrito en Prolog, entendiendo en este caso por término una expresión o estructura, por ejemplo, como la siguiente:

monografia([autor(rich,e),autor(knight,k)],
           titulo([inteligencia,artificial]),
           edicion(2,no),
           [lugar(madrid)],
           [editorial('mcgraw hill')],
           fecha(1997)).

Esta expresión hace uso de listas, delimitadas mediante corchetes, principal estructura de datos en el lenguaje Prolog. La explicación del programa "term-interpreter" está en Alemán, pero su uso es muy sencillo e intuitivo. Una vez descargado el archivo con extensión ".pl", lo ejecutamos, y escribimos la siguiente llamada a continuación del símbolo "?-" ("prompt" del intérprete Prolog) [1] [2] [3]:

?- zeichne_term.

Una vez pulsado "intro", se abre la ventana del programa XPCE propiamente dicho, y es en el campo de texto "Term" donde se debe escribir la expresión que se desea dibujar gráficamente. Este programa es un ejemplo muy sencillo, pero efectivo al mismo tiempo, del tipo de aplicaciones escritas en lenguaje Prolog y dotadas de interface gráfica que es posible desarrollar gracias a XPCE. El propio SWI-Prolog, en sus versiones más recientes, está dotado de una serie de herramientas desarrolladas mediante XPCE, entre otras: PceEmacs, Graphical tracer, Prolog Navigator.

Gerhard Röhner también es autor del programa SWI-Prolog-Editor. Se trata de un editor de programas Prolog, que integra en un mismo entorno un editor de código, con sintaxis coloreada, ayudas y referencias sobre SWI-Prolog y XPCE, y el propio intérprete para ejecutar los programas a medida que se van desarrollando, incluyendo el soporte necesario para mostrar la salida gráfica de aplicaciones escritas con XPCE.

En "Programando la interfaz gráfica con XPCE/Prolog" (formato PDF) Pau Sánchez explica de forma concisa los principales predicados y procedimientos que hay que manejar para dotar de capacidad e interactividad gráfica a programas escritos en lenguaje Prolog, mediante el comentado módulo XPCE de SWI-Prolog. Se trata de un trabajo realizado bajo la dirección de Faraón Llorens en el contexto de las asignaturas que éste imparte en la UA.

Visual Prolog (la versión Personal Edition es de uso libre para fines no comerciales), es otro entorno de desarrollo que combina procedimientos de programación gráfica con bases de conocimiento y motores de inferencia escritos en Prolog. En este caso, los proyectos creados se pueden "empaquetar" en un archivo ejecutable ".exe". En la página de Visual Prolog hay una serie de tutoriales muy buenos que abarcan generalidades del lenguaje Prolog por un lado, y cuestiones específicas de Visual Prolog y la programación gráfica en este entorno por otro. Un manual en castellano: "Entorno de Desarrollo Visual Prolog" (también en formato Word, comprimido en un archivo ".zip").

Para finalizar, y retomando el hilo inicial, merece la pena leer los comentarios que ha suscitado la cuestión que da título a este "post", en la reseña publicada en Lambda the Ultimate, "Why don't more people use Prolog?". Se pueden leer razonamientos muy interesantes basados en la experiencia de terceros, que (casi) siempre es muy valiosa.

[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.