tag:blogger.com,1999:blog-54548822024-03-13T18:13:56.324+01:00Programación Lógica y Recuperación de InformaciónEspacio 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.etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.comBlogger50125tag:blogger.com,1999:blog-5454882.post-1141666755832184692006-03-06T18:37:00.000+01:002006-03-20T17:46:39.213+01:00DCG: notación de reglas gramaticales en Prolog<p>La notación de reglas gramaticales DCG (Definite Clause Grammar,
en castellano <em>gramática de cláusulas definidas</em>) es
una variante o extensión sintáctica de la sintaxis ordinaria
del lenguaje Prolog, cuyo objeto es implementar gramáticas formales
de forma abreviada, y en consecuencia simplificar y hacer más legibles
los analizadores sintácticos escritos en este lenguaje, ya que permite
manejar información (entiéndase por ésta "variables")
implícita. Su expresión es una notación abreviada
de la sintaxis del lenguaje Prolog, recogida por la práctica totalidad
de los <em>parsers</em> e intérpretes actuales para este lenguaje, que la
transforman automáticamente y de forma interna en cláusulas
normales. En la notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
el operador infijo ":-" es sustituido por el operador del mismo carácter
"-->", y se puede establecer, a modo de ejemplo, la siguiente correspondencia
entre notaciones, siendo la primera la cláusula Prolog en sintaxis ordinaria, y la segunda
la notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
equivalente:</p>
<p class="codigo">oracion(S0,S) :- sintagma_nominal(S0,S1), sintagma_verbal(S1,S).<br />
oracion --> sintagma_nominal, sintagma_verbal.</p>
<p>La anterior cláusula Prolog se expresa en palabras como sigue:</p>
<blockquote>"Existe una oración entre S0 y S si existe un sintagma nominal
entre S0 y S1, y existe un sintagma verbal entre S1 y S"</blockquote>
<p>La notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
se basa en la utilizada para las <a href="http://es.wikipedia.org/wiki/Gram%C3%A1tica_libre_de_contexto">gramáticas libres de contexto</a> (<em>context-free
grammars</em> o CFGs, <a href="http://es.wikipedia.org/wiki/Gram%C3%A1tica_transformacional">N. Chomsky</a>), estructura jerárquica que indica
las relaciones de las construcciones del lenguaje, descritas mediante notación
BNF (<em>Backus Normal Form</em> ó
<em>Backus-Naur form</em>), creada
originalmente para definir la estructura sintáctica del lenguaje
ALGOL60 (1960, John Backus), y muy utilizada tanto para definir la estructura
sintáctica de los lenguajes de programación, como para definir
estructuras sintácticas de los lenguajes en general. Por tanto, mediante notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>,
es posible manejar directamente en lenguaje Prolog gramáticas libres de contexto. Las gramáticas
libres de contexto vienen a ser una simplificación de la gramática
ordinaria, que, por ejemplo, y referida al idioma castellano, podría
adoptar la siguiente expresión en notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>:</p>
<div class="codigo">
<p>oracion --> sintagma_nominal, sintagma_verbal.</p>
<p>sintagma_nominal --> determinante, nombre.</p>
<p>sintagma_verbal --> verbo, sintagma_nominal.
<br />sintagma_verbal --> verbo.</p>
<p>determinante --> [el].
<br />determinante --> [la].</p>
<p>nombre --> [hombre].
<br />nombre --> [manzana].</p>
<p>verbo --> [come].
<br />verbo --> [canta].</p>
</div>
<p>Que el sistema Prolog (en este caso <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>)
traduce automáticamente al siguiente conjunto de cláusulas:</p>
<div class="codigo">
<p>oracion(A,B):- sintagma_nominal(A,C),
<br />
sintagma_verbal(C,B).</p>
<p>sintagma_nominal(A,B):- determinante(A,C),
<br />
nombre(C,B).</p>
<p>sintagma_verbal(A,B):- verbo(A,C),
<br />
sintagma_nominal(C,B).
<br />sintagma_verbal(A,B):- verbo(A,B).</p>
<p>determinante([el|A],A).
<br />determinante([la|A],A).</p>
<p>nombre([hombre|A],A).
<br />nombre([manzana|A],A).</p>
<p>verbo([come|A],A).
<br />verbo([canta|A],A).</p>
</div>
<p>Como es fácilmente deducible, el programa basado en esta pequeña
y muy limitada gramática, solo aceptará como oraciones gramaticalmente
correctas "el hombre come la manzana", "el hombre canta", y combinaciones
similares, incluso por ejemplo frases a todas luces gramaticalmente incorrectas
como "la manzana canta", "la hombre come", etc., devolviéndonos
una lista vacía, pero no aceptará por ejemplo "el hombre
baila" (el verbo "baila" no se halla dentro de la base de hechos o conocimiento
del programa). Se entiende por tanto que una gramática completa,
que abarque todas las posibles estructuras, relaciones y combinaciones de
las partes constitutivas de una lengua, requiere un programa muy complejo
y difícil de implementar. En el ejemplo expuesto, se pueden obtener
todas las oraciones aceptadas como gramaticalmente correctas por la gramática
del programa, lanzando en el intérprete el siguiente objetivo:</p>
<p class="codigo">?- oracion(X,[]).</p>
<p>Por su parte, un ejemplo muy sencillo de gramática para el idioma
inglés, escrita mediante notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>,
adopta la siguiente expresión:</p>
<div class="codigo">
<p>sentence --> noun_phrase, verb_phrase.</p>
<p>noun_phrase --> noun.
<br />noun_phrase --> determiner, noun, rel_clause.</p>
<p>verb_phrase --> verb.
<br />verb_phrase --> verb, noun_phrase.</p>
<p>rel_clause --> [].
<br />rel_clause --> [that], verb_phrase.</p>
<p>determiner --> [the].
<br />determiner --> [a].</p>
<p>noun --> [john].
<br />noun --> [annie].
<br />noun --> [man].
<br />noun --> [men].
<br />noun --> [woman].
<br />noun --> [women].
<br />...</p>
<p>verb --> [like].
<br />verb --> [likes].
<br />...</p>
</div>
<p>En la notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
se suprimen dos parámetros, una lista de entrada, y una lista de
salida. La primera puede estar representada, por ejemplo, por la oración
[el,perro,muerde] y la segunda por una lista vacía [] que es el
resultado de comprobar la estructura sintáctica de dicha oración
en función del <em>parser</em> utilizado. Adicionalmente, es posible
agregar variables a las gramáticas representadas mediante notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>, por ejemplo para especificar el género y el número.</p>
<p>Como se ha dicho anteriormente, la notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
permite añadir argumentos adicionales, y también incorporar objetivos Prolog
en el cuerpo de las reglas, estos últimos encerrados entre llaves
{}. Los argumentos adicionales nos permitirían por ejemplo introducir
las reglas gramaticales correctas en función de las convenciones
adoptadas por la lengua objeto de representación, y así evitar incorrecciones en la concordancia género / número,
etc. También, mediante notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
también es posible construir programas capaces de representar árboles
de análisis de una oración (que representan las categorías
gramaticales implicadas en la descomposición de sus partes), y <a href="http://www.nyu.edu/pages/linguistics/ling.html#tree" lang="en">árboles
sintácticos</a> (<em>parse trees</em>) que de una forma gráfica
muestran la estructura en forma de árbol descendente de determinada
construcción gramatical. Como explicamos en la anterior anotación,
los analizadores sintácticos o <em>parsers</em> se encargan de la
construcción de árboles de análisis de las oraciones
de una lengua, capaces de representar la estructura sintagmática
de las mismas. Siguiendo con el ejemplo de la sencilla gramática
en castellano, expuesto más arriba, la representación gráfica
del árbol de análisis de la oración "el hombre come
la manzana" presenta el siguiente aspecto, haciendo uso para ello <a href="http://www.sdsc.edu/~ludaesch/CSE232b-02/draw.swi">de
este programa</a>:</p>
<div class="codigo">
<p>?- draw(o(sn(d(el),n(hombre)),sv(v(come),sn(d(la),n(manzana))))).</p>
<p>
o
<br />
|
<br /> +--------------------+
<br /> sn
sv
<br /> |
|
<br /> +-------+ +------------+
<br /> d n
v sn
<br /> | |
| |
<br /> | |
| +--------+
<br /> | |
| d
n
<br /> | |
| |
|
<br /> | |
| |
|
<br /> el hombre come
la manzana</p>
</div>
<p>Donde "o" = oración, "sn" = Sintagma Nominal, "d" = Determinante,
"n" = Nombre, "sv" = Sintagma Verbal, y "v" = Verbo. Hay que advertir que
este programa no realiza el árbol de análisis propiamente
dicho, que es:</p>
<p class="codigo">o(sn(d(el),n(hombre)),sv(v(come),sn(d(la),n(manzana))))</p>
<p>Simplemente lleva a cabo su representación gráfica en
forma de diagrama de caracteres <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>.
El código fuente del programa en cuestión, que originalmente
se llama <a href="http://www.sdsc.edu/~ludaesch/CSE232b-02/draw.swi">draw.swi</a>,
ha sido copiado a un editor de texto plano, y salvado con la extensión
".pl" para poder ser ejecutado por el intérprete <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>,
aunque otra opción es asociar los archivos con extensión
".swi" con el ejecutable de dicho intérprete. Su autor es <a href="http://users.sdsc.edu/~ludaesch/" lang="en">Bertram
Ludäscher</a>, de la "University of California Davis".</p>
<p>Los ejemplos de notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
y Prolog en castellano se han tomado del capítulo 9, "Uso de reglas
gramaticales en Prolog", apartado 9.1, "El problema del análisis
sintáctico", de la obra de W.F. Clocksin y C.S. Mellish "Programación
en Prolog" (2ª ed.; Barcelona: Gustavo Gili, 1993; ISBN: 84-252-1339-8),
traducción del original en inglés "Programming in Prolog",
a la que me remito para obtener una explicación detallada sobre
reglas gramaticales, análisis sintáctico, y notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>
en Prolog, habida cuenta de que los autores reseñados hacen una
exposición clara y perfectamente comprensible sobre el particular,
perfectamente asequible para las personas no excesivamente versadas en
este lenguaje.</p>
<p>Por su parte el ejemplo de gramática en inglés se ha obtenido
del capítulo 17, "Languague Processing with Grammar Rules", de la
obra "Prolog - Programming for Artificial Intelligence" (Ivan Bratko, 2ª
ed.; Addison-Wesley, 1990; ISBN: 0-201-41606-9). Se trata de un libro muy
recomendable, de nivel más avanzado y completo que el de Clocksin
y Mellish, claramente más introductorio, y como su propio nombre
indica cubre por un lado las generalidades del lenguaje Prolog, y por otro
lado su aplicación a las principales técnicas del campo de
la <acronym title="Inteligencia Artificial">IA</acronym> (búsqueda
y clasificación, sistemas expertos y representación del conocimiento, <acronym title="Procesamiento del Lenguaje Natural">PLN</acronym>,
Machine Learning, etc.).</p>
<p>Por último, mencionar otro ejemplo de utilización práctica
de la notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym> y el lenguaje de programación lógica Prolog, la librería
Html-write [<a href="http://gollem.science.uva.nl/twiki/pl/bin/view/Library/HtmlWrite" lang="en">1</a>]
[<a href="http://www.swi-prolog.org/packages/http.html#sec:3.8" lang="en">2</a>]
[<a href="http://www.mycgiserver.com/~gpiancastelli/archives.jsp?post=0050" lang="en">3</a>]
del intérprete y entorno de desarrollo <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>,
que traslada términos Prolog en <acronym title="HyperText Markup Language" lang="en">HTML</acronym>, generando salidas en este último lenguaje, para lo cual hace uso precisamente de estructuras escritas en notación <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>.</p>
<p>Más información (<acronym title="Procesamiento del Lenguaje Natural">PLN</acronym>
y <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>s
en Prolog):</p>
<ul class="conmargeninf">
<li>
<a href="http://www.amzi.com/AdventureInProlog/advfrtop.htm">Adventure
in Prolog</a> - <a href="http://www.amzi.com/AdventureInProlog/a15nlang.htm">15.
Natural Language</a>.</li>
<li>
En <a href="http://www.coli.uni-saarland.de/~kris/learn-prolog-now/" lang="en">Learn
Prolog Now!</a>: <a href="http://www.coli.uni-saarland.de/~kris/learn-prolog-now/html/node54.html" lang="en">7.
Definite Clause Grammars</a>, <a href="http://www.coli.uni-saarland.de/~kris/learn-prolog-now/html/node64.html" lang="en">8.
More Definite Clause Grammars</a> (<a href="http://www.loria.fr/~blackbur/">P.
Blackburn</a>, <a href="http://www.cogsci.ed.ac.uk/~jbos/">J. Bos</a>,
<a href="http://www.coli.uni-sb.de/~kris/">K.
Striegnitz</a>).</li>
<li>
<a href="http://www.ida.liu.se/~ulfni/lpp/">Logic, Programming and Prolog</a>
- 10. Logic and Grammars (monografía, en formato PDF; U. Nilsson,
J. Maluszynski).</li>
<li>
<a href="http://www.cogs.susx.ac.uk/lab/nlp/gazdar/nlp-in-prolog/">Natural
Language Processing in Prolog</a> (<a href="http://www.cogs.susx.ac.uk/lab/nlp/gazdar/">G.
Gazdar</a>, C. Mellish; <a href="http://www.cogs.susx.ac.uk/local/books/nlp-in-prolog/index.html">otra
ubicación</a>).</li>
<li>
<a href="http://www.ucm.es/info/atg/COMP-COURSE/cl_parsing.html">Parsing
in Natural Language Processing</a> (<a href="http://www.ucm.es/info/atg/COMP-COURSE/cl.html">Julia
Lavid</a>).</li>
<li>
<a href="http://www.cs.vu.nl/~dick/PTAPG.html">Parsing Techniques - A Practical
Guide</a> (monografía, varios formatos; D. Grune, Ceriel J.H. Jacobs).</li>
<li>
<a href="http://utenti.lycos.it/parsers/index.htm">Parsing techniques in
Prolog</a> (monografía, formato ".doc"; Klaus von Bremen).</li>
<li>
<a href="http://www.mtome.com/">Prolog and Natural-Language Analysis</a>
(monografía, formato PDF; F.C.N. Pereira, S.M. Shieber).</li>
<li>
<a href="http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html">Prolog
Tutorial - 7. Introduction to Natural Language Processing</a> (<a href="http://www.csupomona.edu/~jrfisher/www/">J.R.
Fisher</a>).</li>
<li>
<a href="http://cs.wwc.edu/~cs_dept/KU/PR/Prolog.html#dcg">Prolog Tutorial
- Definite Clause Grammars</a> (A. Aaby; <a href="http://cs.wwc.edu/KU/PR/Prolog.html#dcg" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://cs.wwc.edu/~aabyan/LogicPgmg/naturalLanguage.html" lang="en">Natural
Language Processing</a> (A. Aaby).</li>
<li>
<a href="http://cs.wwc.edu/~aabyan/LogicPgmg/CODE/DCG/doc/doc.html" lang="en">A
Natural Language Processor</a> (A. Aaby).</li>
<li>
<a href="http://www.dai.ed.ac.uk/groups/ssp/bookpages/quickprolog/quickprolog.html">Quick
Prolog</a> - <a href="http://www.dai.ed.ac.uk/groups/ssp/bookpages/quickprolog/node27.html">Definite
Clause Grammars</a> (D.S. Robertson).</li>
<li>
<a href="http://www.info.ucl.ac.be/people/PVR/edcg.html" lang="en">Extended
DCG's: Declarative Programming with State</a> (<a href="http://www.info.ucl.ac.be/people/cvvanroy.html">Peter
Van Roy</a>).</li>
<li>
<a href="http://www.ai.uga.edu/mc/ProNTo/" lang="en">ProNTo - Prolog Natural
Language Tools</a>.</li>
</ul>
<p>Específicamente sobre <acronym title="Definite Clause Grammar" lang="en">DCG</acronym>:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/DCG.html" lang="en">Parsing
in Prolog</a> (<a href="http://www.cs.sfu.ca/~cameron/Teaching/384/99-3/DCG.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/DCG2.html" lang="en">Definite
Clause Grammars</a> (<a href="http://www.cs.sfu.ca/~cameron/Teaching/384/99-3/DCG2.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/regexp-plg.html" lang="en">Perl
Style Regular Expressions in Prolog</a> (<a href="http://www.cs.sfu.ca/~cameron/Teaching/384/99-3/regexp-plg.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.ingenio.co.uk/prolog/dcgs.html" lang="en">Introduction
to Definite Clause Grammars</a>.</li>
</ul>
<p>CFGs y BNF:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.cs.buap.mx/~jcom/lprog/gramaticas.html">Lenguajes de
Programación: Notación BNF y otras gramáticas</a>.</li>
<li>
<a href="http://cui.unige.ch/db-research/Enseignement/analyseinfo/AboutBNF.html" lang="en">What
is BNF notation?</a></li>
<li>
<a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?Backus-Naur+Form" lang="en">Backus-Naur
Form</a> (en <acronym title="Free On-Line Dictionary of Computing" lang="en"><a href="http://foldoc.doc.ic.ac.uk/foldoc/index.html" lang="en">FOLDOC</acronym></a>).</li>
<li>
<a href="http://en2.wikipedia.org/wiki/Context-free_grammar" lang="en">Context-free
grammar</a> (en <a href="http://en2.wikipedia.org/" lang="en">Wikipedia</a>).</li>
</ul>
<p>Forman parte del mismo conjunto de <a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/" lang="en">lecturas
de clase</a>:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/syn-sem-prag-meta.html" lang="en">Four
Concepts in Programming Language Description: Syntax, Semantics, Pragmatics
and Metalanguage</a>.</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/BNF.html" lang="en">Grammatical
Description of Syntax: The BNF Metalanguage</a>.</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/deriv-ambig.html" lang="en">Derivations,
Ambiguity and Semantics</a>.</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/RegExpMetalanguage.html" lang="en">Nonrecursive
Syntax: The Regular Expression Metalanguage</a>.</li>
<li>
<a href="http://www.cs.sfu.ca/cs/people/Faculty/Cameron/Teaching/383/syn-issues.html" lang="en">Between
Lexics and Syntax: Whitespace, Layout, Comment Conventions</a>.</li>
</ul>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com7tag:blogger.com,1999:blog-5454882.post-1141001781771714832006-02-27T01:55:00.000+01:002006-02-28T11:16:09.893+01:00Analizadores sintácticos y tokenización<p>Dentro del complejo y amplio ámbito de dominio del Procesamiento
del Lenguaje Natural (PLN), una de las funciones esenciales de los analizadores sintácticos
o <em>parsers</em> es el análisis de cadenas de <em>tokens</em> en busca
de posibles errores sintácticos (recordemos que la sintaxis, entendida en sentido amplio, es aquella parte
de la gramática que se ocupa de las normas que rigen la formalización
de las <em>palabras</em> en estructuras mayores tales como las <em>oraciones</em>,
así como de las relaciones que establecen entre si dichas palabras). Un <em>token</em> se puede definir
como la unidad mínima de información con significado propio
dentro de una secuencia de caracteres alfanuméricos. Estas cadenas
de unidades mínimas de información o <em>unidades léxicas</em>,
son generadas previamente por el módulo lexicográfico integrado
en el parser, encargado de identificarlas dentro de un texto o secuencia
ordenada de caracteres alfanuméricos. Por su parte, la <em>tokenización</em>
es un proceso consistente en la descomposición, en forma de lista,
de esas cadenas de <em>tokens</em> en sus unidades mínimas. Así,
un programa de este tipo podría generar la siguiente lista de <em>tokens</em>
a partir de la frase "¡Hola Mundo!":</p>
<p class="codigo">[161, 72, 111, 108, 97, 32, 77, 117, 110, 100, 111, 33]</p>
<p>Donde cada uno de los números de la lista se corresponde con el
carácter ASCII (American Standard Code for Information Interchange) correspondiente a cada una de las unidades mínimas de significación
identificadas en la frase, en el mismo orden. Por supuesto es posible llevar
a cabo el proceso inverso, y a partir de esa lista generar las cadenas
de <em>tokens</em> que forman la frase en cuestión. La <em>tokenización</em>
es por tanto el proceso básico que permite manejar el lenguaje natural
escrito para su posterior procesamiento, en base a su descomposición
en unidades mínimas de información con significado propio.</p>
<p>La mayor parte de los lenguaje de programación contemplan instrucciones
específicas para llevar a cabo el proceso de <em>tokenización</em>
de cadenas ordenadas de caracteres alfanuméricos, si bien es posible
implementar alternativamente esta operación mediante otros procedimientos
proporcionados por esos lenguajes.</p>
<p>Así, un programa que pretenda "leer" un texto, deberá
en primer lugar "tokenizarlo", generando una lista de los <em>tokens</em>, o unidades
léxicas mínimas con significado propio, identificados en
ese texto. A continuación, procederá a identificar unidades
mayores de significado propio (contemplando por ejemplo la presencia, como
elemento separador, del carácter <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym> 36, que se corresponde con
el espacio en blanco), lo que podríamos asimilar como "palabras",
para, finalmente, acabar identificando otras unidades de significación
de orden superior, frases u oraciones. Diferenciadas las oraciones del
texto "leído", el parser procede a realizar el análisis sintáctico
propiamente dicho, identificando para ello las partes constitutivas de
dichas oraciones que, a tal fin, son comparadas con patrones previamente
definidos de estructuras posibles, que dependerán de la lengua de
escritura del texto, y del nivel de complejidad de análisis que
se pretenda alcanzar, ya que contemplar todas las posibles estructuras
de una lengua y sus numerosas variaciones, y representarlas mediante una
serie de reglas, no es una tarea precisamente sencilla.</p>
<p>La detección de las variaciones de posición admitidas
en cada lengua, en relación con el orden de las palabras, o análisis
de las transformaciones, se realiza mediante procesos de análisis
estructural que tratan de identificar la estructura profunda de una oración
en relación con su estructura superficial. El análisis estructural,
en base a la estructura superficial (2) de una oración y, cambiando
el orden de determinadas palabras, trata de determinar su posible transformación
a una estructura de tipo profundo (1):</p>
<blockquote>(1) Estructura profunda: "Pedro come una manzana"<br />
(2) Estructura superficial: "Come Pedro una manzana"</blockquote>
<p>La implementación del proceso de <em>tokenización</em>, al
margen de la utilización de instrucciones específicas que
transforman directamente una cadena de caracteres alfanuméricos
en una cadena de <em>tokens</em>, implica la utilización de otro tipo de
instrucciones cuya función es la "lectura" individual, uno a uno,
de los caracteres presentes en el canal o grupo activo de entrada de datos
(<em>input stream</em>) que se halla especificado, que por lo general será
bien el teclado del ordenador, que es el canal activo de entrada por defecto
(al igual que el canal de salida de datos, <em>output stream</em>, por defecto
es el monitor del ordenador), o bien un fichero de texto ubicado en la
ruta que se indique.</p>
<p>Así, en el lenguaje Prolog existe el predicado predefinido <strong>name(?AtomOrInt,
?String)</strong>. El argumento <strong>AtomOrInt</strong> es la variable que representa
la cadena de caracteres alfanuméricos o "átomo" que se desea
<em>tokenizar</em>, mientras que el argumento <strong>String</strong> es la variable
que representa la lista resultante. El símbolo "<strong>?</strong>" indica
que ambos argumentos son reversibles, es decir, que pueden funcionar tanto
como variables de entrada de datos como variables de salida, si bien uno
de ellos ha de estar necesariamente instanciado. Su modo de funcionamiento
es el siguiente:</p>
<div class="codigo">
<p>?- name('¡Hola Mundo!', X).</p>
<p>X = [161, 72, 111, 108, 97, 32, 77, 117, 110|...] [write]</p>
<p>X = [161, 72, 111, 108, 97, 32, 77, 117, 110, 100, 111, 33]</p>
<p>Yes</p>
</div>
<p>La indicación <strong>[write]</strong> simplemente expresa que, una vez que
el intérprete proporciona la lista de <em>tokens</em>, incompleta como indica
la barra vertical seguida de puntos suspensivos "<strong>|...</strong>", se ha tecleado
el operador <strong>w</strong> para que ésta se muestre en toda su extensión,
ya que, en este caso <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>,
muestra por defecto en pantalla una versión abreviada de las listas,
cuando estas exceden determinada longitud (no obstante se pueden obtener
listas completas utilizando el comando "w", tal y como se explica <a href="http://gollem.swi.psy.uva.nl/twiki/pl/bin/view/FAQ/AllOutput" title="I want the whole answer" lang="en">en
esta página</a>).</p>
<p>Por supuesto, existen más predicados para la manipulación
de átomos, como se referencia en el apartado "<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/manipatom.html" lang="en">Analysing
and Constructing Atoms</a>" del manual de <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>.</p>
<p>Otra forma de tokenizar átomos en Prolog es utilizar el predicado
<strong>get0/1</strong>
y <strong>get0/2</strong> y algún tipo de algoritmo recursivo que vaya "recorriendo"
todo el texto del canal activo de entrada de datos (un archivo externo,
por ejemplo), y al tiempo introduzca los <em>tokens</em> resultantes, incluyendo
los espacios en blanco (<strong>get/1</strong> y <strong>get/2</strong> no los leen), en una
lista acumuladora, en tanto no se alcance determinado marcador de parada,
definido previamente (para este fin suele aprovecharse el átomo
<strong>end_of_file</strong>,
que se corresponde con el final de texto). Este predicado realmente lee
el byte correspondiente a cada carácter alfanumérico individual,
asociándolo con su correspondiente código ASCII.</p>
<p>El analizador sintáctico, en base a los constituyentes de una
oración (véanse los principios de la <a href="http://es.wikipedia.org/wiki/Generativismo">gramática generativa</a>
de Noam Chomsky), y mediante un número finito de reglas, trata de
determinar la gramaticalidad o no de un número infinito de construcciones.
Un analizador sintáctico trata de ver hasta que punto puede someterse
un grupo de palabras a una estructura de reglas. Así por ejemplo,
si tenemos la oración:</p>
<blockquote>Pedro come una manzana</blockquote>
<p>en primer lugar, y mediante un proceso de <em>tokenización</em>, se
genera una lista de las palabras que contiene. De esta lista inicial de
palabras, se puede diferenciar una sublista que se corresponda con el Sintagma
Nominal (SN) de la oración, y si ésta puede concatenarse
con otras sublistas que según determinadas
reglas se verifica como Sintagma Verbal (SV), la oración se concluye que
es gramatical. Lo que importa en los constituyentes es el orden de las
palabras de la oración.</p>
<p>El analizador sintáctico realiza el análisis secuencialmente,
palabra por palabra, partiendo de una lista inicial que, siguiendo con
el ejemplo de la oración expuesta, sería:</p>
<p class="codigo">[pedro,come,una,manzana]</p>
<p>El proceso de computación de las reglas del analizador sintáctico
debe dar como resultado otra lista, que será una lista vacía
<strong>[]</strong> si la oración inicial es gramatical (siempre en base a las reglas
que tenga definidas el analizador). En definitiva, partiendo de la lista
inicial de palabras, el analizador sintáctico comprueba si ésta
se puede subdividir en dos sublistas, que se corresponden, respectivamente,
con el <acronym title="Sintagma Nominal">SN</acronym> y el <acronym title="Sintagma Verbal">SV</acronym> de la oración.</p>
<p>Más información: <a href="http://elies.rediris.es/elies9/3-1-2.htm">El
análisis sintáctico y el análisis semántico</a>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com1tag:blogger.com,1999:blog-5454882.post-1140347377440502542006-02-19T12:08:00.000+01:002006-03-02T17:01:04.806+01:00¿Ha llegado el fin de los tesauros documentales?<p>Aunque no suele ser mi costumbre publicar integramente textos completos
en este sitio (para esos menesteres mantengo abierto <a href="http://vistoyleido.blogspot.com/">Visto y Leído</a>),
me permito hacerlo en esta ocasión dado el indudable interés
que tiene el que reproduzco a continuación, en función de
las ideas que plantea, las experiencias prácticas puestas de manifiesto y compartidas por el autor, y el debate que todo ello pretende
suscitar. Se trata de un mensaje enviado
por <a href="http://multidoc.rediris.es/joseramon/">José Ramón
Pérez Agüera</a> (Departamento de Sistemas Informáticos
y Programación, Facultad de Informática, Universidad Complutense
de Madrid) a la lista de distribución <a href="http://www.rediris.es/list/info/iwetel.es.html">IWETEL</a>,
el pasado 13/02/2006 (para acceder al texto original, en el apartado de archivos, hace falta estar
suscrito a dicho foro de discusión para profesionales del ámbito de las bibliotecas y los centros de documentación).</p>
<p>[Comienza el texto de Pérez Agüera]</p>
<p>"Aunque no me toca publicar nota en <a href="http://www.thinkepi.net/">Thinkepi</a>,
llevo unos meses (de hecho algún año que otro) dándole
vueltas a este asunto y me gustaría contar con la opinión
de la comunidad de documentalistas, más allá de mis propias
observaciones, con lo cual este correo no pretende ser una nota sino dar
pie a un debate en el que los documentalistas no están teniendo
voz, al desarrollarse dentro del campo de la informática.</p>
<p>Trabajo en generación automática de tesauros, lo cual
me ha llevado a realizar experimentos de indización automática
y expansión de consultas a partir de tesauros realizados a mano.
Concretamente he utilizado tres tesauros: ISOC-Economía, EUROVOC
y SPINES, todos ellos conocidos de sobra. La colección sobre la
que he realizado las pruebas ha sido el sub-conjunto de noticias de economía
y política generadas por la Agencia EFE en 1994 (efe94 es una colección
típica en experimentos de recuperación de información
que consta de un total de 215.738 documentos. Yo he utilizado 23.390 en
mis experimentos para centrarme en el área de política y
economía, las cuales son cubiertas en buena medida por los tesauros
anteriormente mencionados).</p>
<p>A parte también he contado con un conjunto 22 de consultas con
sus respectivos juicios de relevancia para el dominio mencionado de cara
a la realización de los experimentos. Estas consultas las he obtenido
del congreso <a href="http://www.clef-campaign.org/" lang="en">CLEF</a>
[Cross-Language Evaluation Forum] que se celebra todo los años y
que se centra en temas de recuperación de información mono
y multilingüe.</p>
<p>Como motor de búsqueda he usado <a href="http://lucene.apache.org/" lang="en">Lucene</a>,
adaptado al español con <em>stemming</em> sobre los términos
de indización, el cual está basado en el <a href="http://www.ub.es/bid/04figue2.htm#ModeloVectorial">modelo
tradicional de espacio vectorial</a> de Salton (un clásico, vamos).</p>
<p>El objetivo de mis primeros experimentos ha sido el de comprobar de
que forma afectaba a la recuperación de información automatizada
el uso de tesauros documentales como los que se usan todos los días
en centros de documentación de todo el mundo. Y cual no ha sido
mi sorpresa al comprobar que tanto juntos como por separado, usando todos
o parte de los tipos de relaciones que existen en los tesauros, realizando
expansión global directa o ponderada (la forma en que he ponderado
los tesauros es otra historia), en cada uno de los casos los tesauros mencionados,
no han mejorado prácticamente nada la recuperación en la
colección, ni en precisión, ni en recall (ni en otro cerro
de medidas que he ido aplicando basadas en el modelo propuesto por <a href="http://trec.nist.gov/" lang="en">TREC</a>
[Text REtrieval Conference], otro congreso de <acronym title="Recuperación de Información">RI</acronym>
que tiene un programita bastante completillo llamado trec_eval para evaluar
la recuperación), es más en algunos de los experimentos,
dependiendo de la longitud de la consulta el uso de tesauros documentales
hechos a mano empeoraba los resultados.</p>
<p>El siguiente paso en mi investigación ha sido trabajar con tesauros
generados automáticamente a partir de tres metodologías básicas:</p>
<ul class="conmargeninf">
<li>
Procesamiento lingüístico de la colección (<em>POS-Tagging</em>,
análisis sintáctico, análisis de árboles de
dependencia entre términos).</li>
<li>
Análisis de co-ocurrencias para la generación de las relaciones
entre términos (<em>Latent Semantic analysis</em>, Qui y Frei (y su
versión española implementada por Zazo, Berrocal y Cia de
Salamanca), Jing y Croft, etc.).</li>
<li>
Utilización de otros recursos lingüísticos (léase
<a href="http://www.illc.uva.nl/EuroWordNet/" lang="en">eurowordnet</a>
en su versión española, y diccio).</li>
</ul>
<p>Los tesauros generados automáticamente a partir de estas metodologías
sí han proporcionado mejoras significativas en la recuperación.
No me quiero poner aquí más pesado de la cuenta sobre los
detalles técnicos y las cifras pero para el que las quiera se las
puedo pasar.</p>
<p>El caso es que comenté el hecho con Antonio García Jiménez,
que de esto de tesauros documentales sabe un rato, y me comentó
ciertas ideas muy valiosas que explicaban en parte los resultados, y que
se podrían resumir (Antonio, si andas por ahí, corrígeme
si me equivoco) en que los tesauros no se adaptaban perfectamente a la
colección sobre la que yo los aplicaba y que por tanto se necesitaría
un tesauro hecho a mano para la colección con la que yo trabajo
para obtener una mejora basada en el uso de tesauros documentales.</p>
<p>Tras este comentario me quede rumiando y modifique la colección
para adaptarla terminológicamente a los tesauros con los que yo
contaba, para hacer confluir ambos conjuntos de datos en lo posible y así
comprobar si mejoraba algo la capacidad de recuperación de los tesauros,
pero por desgracia los datos han seguido siendo bastante descorazonadores.</p>
<p>Después de todas estas pruebas me surgió la siguiente
pregunta ¿realmente tienen lugar los tesauros hechos a mano, y basados
en la metodología y normativas tradicionales en el panorama de recuperación
automatizada imperante hoy, ya sea dentro o fuera de Internet?</p>
<p>Mi respuesta por el momento, y a falta de vuestros comentarios, es que
no tienen lugar y que es necesario plantearse con urgencia varios cambios
en la metodología de elaboración de tesauros que existe actualmente
y de la que las normas ISO, el libro de Gilchrist y Aitchison y el libro
de Blanca Gil, suponen las principales referencias.</p>
<p>Los principales problemas del uso de tesauros documentales en Recuperación
de Información Automatizada son:</p>
<ul class="conmargeninf">
<li>
Dispersión de datos: Es decir en la colección aparecen constantemente
palabras que el tesauro no es capaz de normalizar (este problema no se
soluciona con una actualización periódica hecha a mano en
función del crecimiento de la colección).</li>
<li>
Ambigüedad Semántica excesiva aún en tesauros de dominio
específico como los mencionados.</li>
<li>
Inconsistencias en la estructura de los tesauros.</li>
</ul>
<p>Todos estos problemas son normales teniendo en cuenta que son tesauros
hechos y gestionados a mano sin ningún mecanismo más o menos
automático de control de consistencia (de hecho la mera importación
de los tesauros a <acronym title="Structured Query Language" lang="en">SQL</acronym> a permitido la detección de estas inconsistencias
estructurales) más allá de programas tipo multites y demás.</p>
<p>A esto se suma que tal y como se hacen los tesauros hoy en día,
y en contra de lo que muchos opinan, tampoco sirve para la transición
a las ontologías, debido a cuestiones básicas de diseño
(fundamentalmente el paradigma orientado a objetos) con las que los tesauros
documentales no cumplen ni de lejos y que provoca serios problemas de consistencia
cuando intentamos convertir un tesauro documental en una ontología.</p>
<p>En vista a estos hechos y a que yo no doy más de mi por el momento
en este asunto, me gustaría conocer vuestra opinión en este
tema (pues a muchos les va el pan en ello, pienso yo). Por concretar, las
preguntas iniciales, sin excluir otras posible que podéis ir haciendo
serían:</p>
<ul class="conmargeninf">
<li>
¿Cual es el papel de los tesauros documentales en el contexto de
la recuperación de información automatizada en centros de
documentación?</li>
<li>
¿Cual es el papel de los tesauros documentales en la recuperación
de información en Internet?</li>
<li>
¿Es necesario modificar el paradigma de elaboración de tesauros
actualmente imperante? ¿en que sentido?</li>
</ul>
<p>Yo, aunque no soy un experto tesaurista tengo mis opiniones que iré
poniendo aquí si el debate tiene éxito, pero las que me interesan
son las vuestras.</p>
<p>Espero haber sido claro, si tenéis cualquier duda sobre lo que
he escrito o algo no se entiendo no dudéis en preguntar, espero
que con suerte y entre todos le podamos dar un tiento a este problema tan
puramente documental."</p>
<p>[Fin del texto de Pérez Agüera]</p>
<p>Pues ya saben, cualquier comentario, rectificación, aportación
etc., en relación con las cuestiones planteadas en el texto anterior,
pueden enviarlo a la referida lista IWETEL, y así enriquecer el
debate que sin duda merece el conjunto de asuntos planteados por Pérez
Agüera en relación con la recuperación de información,
la indización automatizada, y el papel que los tesauros como instrumento
de descripción normalizada juegan en todo ello...</p>
<p>De Pérez Agüera, y sobre los temas que aborda en su comunicación
a la lista IWETEL, ver también: "<a href="http://www.w3.org/2001/sw/Europe/events/200406-esp/trabajo-final-extratesauros/trabajo-final-extratesauros.html">Automatización
de Tesauros y su utilización en la Web Semántica</a>" (<a href="http://www.w3.org/2001/sw/Europe/" lang="en">SWAD-Europe</a>,
taller <em>Introducción al uso de la Web Semántica</em>, 13 de junio 2004). Véanse también en general los <a href="http://www.w3.org/2001/sw/Europe/reports/intro.html" lang="en">SWAD-Europe
Reports</a> y <a href="http://www.w3.org/2001/sw/Europe/showcase/presentations.html" lang="en">SWAD-Europe
Presentations</a>. SWAD significa <em>Semantic Web Activity: Advanced Development</em>. También me parece pertinente reseñar, de la revista <em><a href="http://www.um.es/fccd/anales/">Anales
de Documentación</a></em> (nº 7, 2004, págs. 79-95),
el artículo de Antonio García Jiménez "<a href="http://www.um.es/fccd/anales/ad07/ad0706.pdf">Instrumentos
de Representación del Conocimiento: Tesauros versus Ontologías</a>"
(en <acronym title="Portable Document Format" lang="en">PDF</acronym>).</p>
<p>En otro orden de cosas, aprovecho la ocasión para relacionar
a continuación una serie de enlaces, referencias y textos que han ido mereciendo
mi atención en los últimos meses (los entrecomillados son citas textuales
tomadas de los sitios referenciados):</p>
<h3>Artículos, introducciones, anotaciones de "blogs":</h3>
<ul class="conmargeninf">
<li>
<a href="http://www.j-paine.org/why_prolog.html" lang="en">Why Use Prolog?</a>
(<a href="http://www.j-paine.org/" lang="en">Jocelyn Paine</a>). Documento
en el que se exponen diez (buenas) razones para (en opinión del
autor) utilizar el lenguaje de programación lógica Prolog.</li>
<li>
<a href="http://www.cs.cornell.edu/home/llee/papers/cstb.pdf" lang="en">"I'm
sorry Dave, I'm afraid I can't do that": Linguistics, Statistics, and Natural
Language Processing circa 2001</a> (en <acronym title="Portable Document Format" lang="en">PDF</acronym>;
Lillian Lee, Cornell University).</li>
<li>
<a href="http://www.monografias.com/trabajos16/curso-visual-prolog/curso-visual-prolog.shtml">Programación
utilizando Visual Prolog 6.0</a> (R. Fuentes Covarrubias, Universidad de
Colima, Facultad de Ingeniería Mecánica y Eléctrica,
México).</li>
<li>
<a href="http://www.maa.org/devlin/devlin_2_00.html" lang="en">The legacy
of the Reverend Bayes</a> (en <a href="http://www.maa.org/news/devangle.html" lang="en">Devlin's
Angle</a>, febrero 2000).</li>
<li>
Dos muy buenas introducciones básicas al lenguaje Prolog: <a href="http://www.bitwisemag.com/copy/programming/prolog/intro/firststeps.html" lang="en">First
Steps in Prolog: an easy introduction to this <acronym title="Artificial Intelligence" lang="en">AI</acronym>
language</a> / <a href="http://www.bitwisemag.com/copy/reviews/software/programming/prolog/free_prologs.html" lang="en">Free
Prologs: a guide to freely available Prolog systems</a> (H. Collingbourne;
en <a href="http://www.bitwisemag.com/" lang="en">Bitwise Magazine</a>).</li>
<li>
<a href="http://thatlogicblog.blogspot.com/2006/02/linear-logic-naturally.html" lang="en">Linear
Logic - Naturally!</a> (en <a href="http://thatlogicblog.blogspot.com/" lang="en">That
Logic Blog</a>): "Linear logic has enjoyed enormous popularity over the
last couple of decades or so. For those without some training in structural
proof theory, understanding the system can be quite intimidating, especially
because of the funny notation and weird jargon. In this post, I am going
to show you that, in fact, you could have invented linear logic! [...]".</li>
<li>
<a href="http://sevein.matap.uma.es/~aciego/TR/gaceta.pdf">Lógica,
Matemática, Deducción Automática</a> (Manuel Ojeda
Aciego, Dept. Matemática Aplicada, Universidad de Málaga;
en <acronym title="Portable Document Format" lang="en">PDF</acronym>):
"Presentamos una breve perspectiva histórica del desarrollo en paralelo
y, a veces, entrelazado, de la Lógica y las Matemáticas,
con el objetivo final de presentar la Lógica Computacional y, en
particular, la Deducción Automática, como un área
de investigación matemática de extraordinario potencial práctico,
no en balde distintos autores de conocido prestigio afirman que la Lógica
es a la Computación como el Cálculo Infinitesimal es a la
Física.".</li>
</ul>
<h3>Páginas y sitios web:</h3>
<ul class="conmargeninf">
<li>
<a href="http://diwww.epfl.ch/mantra/tutorial/english/" lang="en">Neural
Java: Neural Networks Tutorial with Java Applets</a>. "Neural Java is a
series of exercises and demos. Each exercise consists of a short introduction,
a small demonstration program written in Java (Java Applet), and a series
of questions which are intended as an invitation to play with the programs
and explore the possibilities of different algorithms. [...]".</li>
<li>
<a href="http://euriskotwo.blogspot.com/" lang="en">My Artificial Intelligence
project</a>.</li>
<li>
<a href="http://en.wikibooks.org/wiki/Programming:Prolog" lang="en">Wikibook
on Prolog</a> ("[...] This book can serve as a textbook or tutorial for
anyone who wants to learn the prolog programming language. No prior programming
experience is required. Some basic knowledge of logic can come in handy.
[...]").</li>
<li>
<a href="http://yandes.sourceforge.net/" lang="en">Yandes</a>. Conjunto
de módulos concebidos para ayudar a los estudiantes de Lógica,
implementados en lenguaje Prolog. Actualmente son los siguientes: TT: construcción
de tablas de verdad para Lógica proposicional. Incluye además
dos predicados para determinar una fórmula como válida, satisfactible,
o insatisfactible, y un razonamiento como correcto o incorrecto; ND: construcción
de demostraciones de deducción natural; CNF: convierte fórmulas
en forma conjuntiva normal, o en forma clausal.</li>
<li>
<a href="http://triple.semanticweb.org/" lang="en">TRIPLE</a> ("[...] an
RDF query, inference, and transformation language for the Semantic Web.
[...]").</li>
<li>
<a href="http://www.um.es/gtiweb/adrico/">Glosario de Recuperación
de Información Web</a> (Adriana Colino Tomé; vía <a href="http://irsweb.blogspot.com/">Recuperación
de Información en la Web</a>).</li>
</ul>
<h3>Conferencias, congresos:</h3>
<ul class="conmargeninf">
<li>
<a href="http://www.mdai.info/mdai2006/" lang="en">Modeling Decisions for
Artificial Intelligence</a> (Tarragona, 3-5 abril 2006): "Decision making
processes, and information fusion tools at large, are currently embedded
in most Artificial Intelligence applications. As a consequence, systems
based on decision making and fusion techniques are becoming pervasive.
They are currently in use in all kind of environments, from entertainment
gadgets to safety-critical or risk management software.".</li>
<li>
<a href="http://www.cs.uky.edu/iclp06/" lang="en">22nd International Conference
on Logic Programming</a> (ICLP 2006, 17-20 agosto 2006).</li>
</ul>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1131839082998349132005-11-13T00:43:00.000+01:002005-11-21T14:20:05.346+01:00Algoritmo de aprendizaje ID3<p>Una de las aplicaciones prácticas de las Redes Neuronales Artificiales
(RNA), es la clasificación de datos, entendida ésta como
un proceso de búsqueda de propiedades comunes a una serie de objetos
de un dominio del conocimiento, en función de los valores de determinados
atributos. Dentro de la cuestión de la clasificación automática,
en tanto que proceso subsidiario de procesos más generales englobados
dentro de lo que se conoce como "machine learning", uno de los algoritmos
de aprendizaje automático más conocidos, basado en "ejemplos",
es el denominado ID3, o "Iterative Dichotomizer (version) 3" (J.R. Quinlan, 1979). Trabaja con datos simbólicos, en contraposición
a los datos numéricos, y se basa en la obtención de un árbol
de decisión <a name="ref_arboles"></a>(<a href="#arboles">ver
anexo</a>), a partir del cual se obtienen una serie de reglas de producción,
capaces de representar un dominio o universo determinado, generando conocimiento
independiente de dicho dominio (el sistema de aprendizaje parte de un estado
inicial del dominio escogido en el que no existe conocimiento de partida,
extrayendo patrones comunes de entre los ejemplos utilizados, a partir
de los cuales genera una base de conocimientos de aplicación a dicho
dominio). El árbol de decisión permite por tanto clasificar
los datos de entrada. Se pueden distinguir dos tipos de procesos de aprendizaje:</p>
<ul class="conmargeninf">
<li>
Supervisado: los ejemplos o "explicaciones" son proporcionados al sistema
por un sujeto externo. Pertenecen a esta categoría las clasificaciones
de datos basadas en árboles de decisión en base a ejemplos,
como es el caso del algoritmo de aprendizaje <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>.</li>
<li>
No supervisado: los ejemplos u "observaciones" son creados por el propio
sistema. Pertenecen a esta categoría los procesos de agrupamiento
de datos o <em>data clustering</em> (o simplemente <em>clustering</em>).</li>
</ul>
<p>Atendiendo a un plano de abstracción conceptual superior, en el
denominado "machine learning" o aprendizaje de máquina, es posible
diferenciar dos tipos de aprendizaje: <em>aprendizaje memorístico</em> (o
aprendizaje de memoria) y <em>aprendizaje cognoscitivo</em>. El primero hace referencia
a procesos de memorización de a) hechos y b) secuencias o procedimientos
de acciones, siendo el tipo de aprendizaje más fácil de implementar
en un sistema computacional "inteligente". El segundo tipo de aprendizaje,
el cognoscitivo, es el que hace uso de procedimientos de razonamiento a
partir de un conocimiento básico, de forma que sea posible la obtención
de "descripciones de clase", generalizaciones que se obtienen de la observación
de ejemplos concretos. Es por tanto un tipo de aprendizaje basado en un
razonamiento de carácter inductivo, aquel que permite la formulación
de principios generales, a partir de casos específicos individuales,
a diferencia del razonamiento deductivo, que a partir de generalizaciones,
y por medio de la lógica (silogismos), infiere conclusiones de carácter
particular y concreto. En el razonamiento inductivo, es la acumulación
de observaciones lo que permite llegar a conclusiones de validez universal.</p>
<p>No obstante, no es infrecuente, en los sistemas de aprendizaje automático,
encontrar ambos universos de razonamiento, ya que las generalizaciones
que se obtienen mediante el razonamiento inductivo, a partir de un grupo
relativamente reducido de "ejemplos" u observaciones (fase de entrenamiento
previo), servirán posteriormente para la obtención de conclusiones
particulares a través de un proceso de razonamiento deductivo.</p>
<p>Los árboles de decisión o clasificación consisten
en una técnica de carácter inductivo muy utilizada en el
ámbito del aprendizaje automático. Gráficamente, están
formados por nodos y ramas. Los primeros representan el identificador de
un atributo concreto. Los nodos terminales u hojas representan los valores
asociados a dicho atributo, mientras que las ramas. A cada uno de estos
valores, se accede a través de una rama que parte del nodo en cuestión.
Los casos son dirigidos hacia una u otra rama en función de los
valores de sus atributos. Los árboles de clasificación son
un método de aprendizaje válido en aquellas situaciones en
las cuales los ejemplos de partida se pueden representar mediante un conjunto
finito de atributos y valores. Los árboles de clasificación
también se pueden concebir, desde un punto de vista algorítmico,
como un conjunto de reglas <em>if-then</em>.</p>
<p>El carácter de los árboles de decisión es jerárquico,
por lo que solo son capaces de representar conocimiento jerárquico,
la mayor parte del mismo. Por otro lado, su construcción tienen
un carácter recursivo y descendente, de los conceptos generales
a los particulares, razón por la cual el acrónimo TDIDT (Top-Down Induction on Decision Trees) es utilizado para referirse a los algoritmos de construcción de árboles de decisión, como es el caso del algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> de Quinlan.</p>
<p>La mayoría de las heurísticas utilizadas para la determinación
de árboles de decisión mediante algoritmos de aprendizaje,
<a href="http://www.inference.phy.cam.ac.uk/mackay/itprnn/book.html" title="Information Theory, Inference, and Learning Algorithms" lang="en">se
basan</a> en la teoría matemática de la información (<a href="http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Shannon.html" lang="en">C.
Shannon</a>, W. Weaver; Bell Laboratories, 1948) [<a href="http://www.lucent.com/minds/infotheory/" lang="en">1</a>] [<a href="http://programacionlogica.blogspot.com/2004_01_01_programacionlogica_archive.html#107395732842307963">2</a>]. Las heurísticas
son criterios, métodos o principios, que permiten decidir, de entre
varias alternativas de acción, cuál será la más
efectiva para cumplir determinada meta. Permiten restringir el número
de evaluaciones, y en consecuencia repercuten en una mejora de los tiempos
de búsqueda de soluciones. Entropía y cantidad de información
son dos conceptos que se dan la mano en el campo de las heurísticas.
Sobre Entropía y cantidad de información, ver en <a href="http://tiopetrus.blogia.com/">Tio
Petros</a>: [<a href="http://tiopetrus.blogia.com/2005/061301-entropia-y-cantidad-de-informacion-1-..php">1</a>]
[<a href="http://tiopetrus.blogia.com/2005/061401-entropia-y-cantidad-de-informacion-2-.php">2</a>]
[<a href="http://tiopetrus.blogia.com/2005/061501-entropia-y-cantidad-de-informacion-3-.php">3</a>]
[<a href="http://tiopetrus.blogia.com/2005/061601-entropia-y-cantidad-de-informacion-y-4-.php">4</a>].</p>
<p>El algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> genera lo que se conoce como reglas "duras", es decir,
aquellas que solo atienden a dos posibles estados (verdadero-falso, positivo-negativo,
0-1, etc.), y que tienen por tanto un carácter bivalente, a diferencia
de las reglas "borrosas", que permiten representar un rango infinito de
valores entre dos extremos de una escala, como las que se obtienen mediante
algoritmos <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> "extendidos" (ID4, ID5, ID5R, C4.5, C5, etc.).</p>
<p>Pseudocódigo del algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>:</p>
<p class="codigo">Si todos los ejemplos de E pertenecen a una misma clase C, entonces
<br /> arbol1 <-- nodo etiquetado con C
<br />SiNo
<br /> Si a = f, entonces
<br /> C <-- clase mayoritaria de los ejemplos
de E
<br /> arbol1 <-- nodo etiquetado con C
<br /> SiNo
<br /> A <-- mejor atributo de a
<br /> arbol1 <-- nodo etiquetado con A
<br /> Para cada v perteneciente a los valores
de A, hacer
<br /> EAv <-- los ejemplos
de E que tienen el valor v para el atributo A
<br /> Si EAv = f, entonces
<br />
arbol2 <-- nodo etiquetado con la clase mayoritaria en E
<br /> SiNo
<br />
arbol2 <-- ID3(EAv , a-{A})
<br /> arbol1 <-- añadir
a arbol1 el arbol2, a través de una rama etiquetada con v
<br />Devolver arbol1</p>
<p>Otra representación en pseudocódigo del algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>:</p>
<p class="codigo">Aprendizaje-Árbol-Decisión(<em>Ejemplos</em>, <em>Atributos</em>,
<em>Default</em>)
<br /> retorna un árbol de decisión
<br /><br /><strong>IF</strong> no hay <em>Ejemplos</em>, retornar <em>Default</em>
<br /><strong>ELSE IF</strong> si todos los <em>Ejemplos</em> tienen la misma clasificación,
<br /> <strong>retornar</strong> la clasificación,
<br /><strong>ELSE IF</strong> <em>Atributo</em>s = vacío, <strong>retornar</strong> Mayoría(<em>Ejemplos</em>)
<br /><strong>ELSE</strong>
<br /> mejor-atr <-- elegir-atributo(<em>Atributos</em>, <em>Ejemplos</em>)
<br /> árbol <-- nuevo árbol de decisión
con raíz en mejor-atr
<br /> <strong>FOR EACH</strong> valor v[i] de mejor-atr <strong>DO</strong>
<br /> <em>Ejemplos</em>[i] <-- {elementos
de <em>Ejemplos</em> con mejor-atr = v[i]}
<br /> subar <-- Aprendizaje-Árbol-Decisión(ejemplos[i],
<em>Atributos</em>
- mejor-atr, Mayoría(<em>Ejemplos</em>))
<br /> agregar rama al árbol con etiqueta
v[i] y subárbol subar
<br /> <strong>OD</strong>
<br /><strong>retornar</strong> árbol</p>
<p>Los procesos de aprendizaje, que hacen uso de la clasificación
de datos, mediante el descubrimiento de patrones, se utilizan con profusión
dentro de lo que se conoce como "Data Mining", en castellano minería
de datos, explotación de datos, o descubrimiento de conocimiento
en bases de datos, diversidad terminológica en torno a la cual existe
una cierta polémica.</p>
<p>Maximiliano del Rio es autor de una versión escrita en lenguaje
Prolog del algoritmo de aprendizaje <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>. Los archivos correspondientes
a esta implementación (<a href="http://www.programacion.com/codigo/65/">librería
Clasif</a>) se pueden localizar bien en la sección de <a href="http://www.programacion.com/codigo/">código
fuente</a> de <a href="http://www.programacion.com/">programacion.com</a>
(comprimidos en un "zip"), o en el <a href="http://gollem.swi.psy.uva.nl/twiki/pl/bin/view/Main/MaximilianoDelRio" lang="en">espacio
personal</a> que el propio autor tiene en el "<a href="http://gollem.swi.psy.uva.nl/twiki/pl/bin/view" lang="en">Wiki</a>"
de <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>. En "<a href="http://gollem.swi.psy.uva.nl/twiki/pl/pub/Main/MaximilianoDelRio/guia.txt">guia.txt</a>"
se explica el manejo de esta implementación del <a href="http://gollem.swi.psy.uva.nl/twiki/pl/pub/Main/MaximilianoDelRio/id3.pl">algoritmo
<acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> en Prolog</a>, que hace uso de la <a href="http://www.swi-prolog.org/packages/odbc.html" title="SWI-Prolog ODBC Interface" lang="en">interfaz <acronym title="Open DataBase Connectivity" lang="en">ODBC</acronym></a>
para consultar las tablas de la base de datos seleccionada, de las que
se obtienen los ejemplos necesarios para generar las reglas de producción.
Se adjunta además el archivo "<a href="http://gollem.swi.psy.uva.nl/twiki/pl/pub/Main/MaximilianoDelRio/clasif.pl">clasif.pl</a>",
programa de "Data Mining" que hace uso del algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>, dotado de interfaz
gráfica mediante la utilización de la librería nativa
<a href="http://www.swi-prolog.org/graphics.html" lang="en">XPCE</a>.</p>
<blockquote>
"[...] programa que utiliza la librería anterior [...]
Ayuda a generar las reglas y muestra las reglas obtenidas textual y gráficamente;
también muestra una traza de como trabaja el algoritmo."
<div class="cita"><a href="http://www.programacion.com/codigo/65/">Fuente</a></div>
</blockquote>
<p>Esta interfaz gráfica se abre lanzando el objetivo "?- main." en
la línea de órdenes de SWI-Prolog, una vez compilado el programa.
Finalmente, la librería "<a href="http://gollem.swi.psy.uva.nl/twiki/pl/pub/Main/MaximilianoDelRio/compilar.pl">compila.pl</a>"
contiene predicados que permiten <a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/runtime.html" title="SWI-Prolog Manual - Generating Runtime Applications" lang="en">generar
un ejecutable</a> para Windows de los resultados obtenidos, mediante SWI-Prolog.</p>
<p>Para obtener una visión bastante amplia sobre la implementación
en lenguaje Prolog de procesos de aprendizaje automático en general,
y aprendizaje inductivo mediante árboles de decisión en particular
(clasificación de datos), es muy recomendable la lectura del capítulo
18, "Machine Learning", de la (ya clásica) obra de Ivan Bratko "Prolog:
Programming for Artificial Intelligence" (2ª ed. Addison-Wesley, 1994;
ISBN: 0-201-41606-9). Sobre árboles de decisión trata concretamente
el punto 18.6, "Induction of decision trees".</p>
<p>Existe así mismo un repositorio de algoritmos de aprendizaje
automático escritos en lenguaje Prolog, <a href="ftp://ftp.gmd.de/gmd/mlt/ML-Program-Library/" lang="en">Prolog
library of machine learning algorithms</a>, un tanto desactualizado eso
sí, ya que la última actualización parece datar del
año 1994, mantenido por Thomas Hoppe (<a href="http://www.fraunhofer.de/english/" lang="en">Fraunhofer-Gesellschaft</a>,
<a href="http://www.tu-berlin.de/">Universidad
Técnica de Berlín</a>). Los programas están escritos
haciendo uso de la sintaxis y, en la mayor parte de las ocasiones, de los
predicados predefinidos (<em>built-in predicates</em>) contemplados en el
Prolog descrito por Clocksin y Mellish, conocido como "estándar
de Edimburgo", basado a su vez en el DECsystem-10 (D. Warren, F. Pereira
y L. Pereira), para de esta forma asegurar el mayor grado posible de compatibilidad
entre versiones de este lenguaje. Las implementaciones del algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>
se localizan en la carpeta "<a href="ftp://ftp.gmd.de/gmd/mlt/ML-Program-Library/idt">IDT</a>"
(ver en cualquier caso el archivo "<a href="ftp://ftp.gmd.de/gmd/mlt/ML-Program-Library/README" lang="en">Readme</a>" para más información).</p>
<p>Más información:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.iued.uned.es/users/Enlaces/Apuntes/RaAp2.zip">Algoritmo
<acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> de J.R. Quinlan</a> (documento traducido por J.A. Fernández,
en <acronym title="Portable Document Format" lang="en">PDF</acronym>,
comprimido en un zip).</li>
<li>
<a href="http://www.ia.uned.es/~jgb/publica/index.html">Aspectos Básicos
del Aprendizaje Simbólico</a> (J.G. Boticario).</li>
<li>
<a href="http://elvex.ugr.es/etexts/spanish/PhD/as.pdf">Aprendizaje de
clasificadores</a> (F. Berzal Galiano; en PDF).</li>
<li>
<a href="http://elvex.ugr.es/etexts/spanish/PhD/art.pdf">ART: Un método
alternativo para la construcción de árboles de decisión</a>
(F. Berzal Galiano; en PDF).</li>
<li>
<a href="http://elvex.ugr.es/etexts/spanish/PhD/">ART: Un método
alternativo para la construcción de árboles de decisión</a>
(F. Berzal Galiano, 2002; tesis doctoral, en PDF).</li>
<li>
<a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/learning/systems/learn_pl/idt/">IDT:
Torgos ID3-like system based on the gain-ratio measure</a> (algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym>
escrito en sintaxis del Prolog de Edimburgo). Este código se localiza
en el directorio sobre <a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/learning/" lang="en">Machine
Learning</a> del <acronym title="Carnegie Mellon University" lang="en"><a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/" lang="en">CMU</acronym>
Artificial Intelligence Repository</a> (ver <a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/0.html" lang="en">descripción</a>;
en cada uno de los directorios existen tres archivos, "0.html", "0.doc"
y "readme.txt", que contienen la descripción de su contenido). El
directorio dedicado al lenguaje Prolog en general se localiza <a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/" lang="en">en este enlace</a>.</li>
<li>
<a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes/ml/06prop/id3/id3.html" lang="en">Induction
of Decision Trees</a>.</li>
<li>
<a href="http://www.algoritmia.net/articles.php?id=17">Árboles</a>,
<a href="http://www.algoritmia.net/articles.php?id=18">Grafos</a>
(en <a href="http://www.algoritmia.net/articles.php?folder=Estructuras%20de%20Datos">Estructuras
de Datos</a>, <a href="http://www.algoritmia.net/">algoritmia.net</a>).</li>
<li>
<a href="http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/t11arboles.pdf">Árboles
de Clasificación</a> (<acronym title="Portable Document Format" lang="en">PDF</acronym>;
tema de los apuntes de la asignatura "<a href="http://www.sc.ehu.es/ccwbayes/docencia/mmcc/main0405.htm">Métodos
Matemáticos en Ciencias de la Computación</a>", <acronym title="Universidad del País Vasco">UPV</acronym>).</li>
<li>
<a href="http://ciberconta.unizar.es/Biblioteca/0007/arboles.html">Sistemas
de Inducción de árboles de decisión</a>.</li>
<li>
<a href="http://plato.la.asu.edu/guide.html" lang="en">Decision Tree for
Optimization Software</a>.</li>
<li>
En <a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes.html" lang="en">Artificial
Intelligence Lecture Notes</a>: a) <a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes/mandc/mandc.html" lang="en">Problem
Solving in Prolog</a>; b) <a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes/ml/06prop/id3/id3.html" lang="en">Induction
of Decision Trees</a>.</li>
<li>
Algoritmo <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym> <a href="http://www.us.kanto-gakuen.ac.jp/indo/front_e.html" lang="en">escrito en Prolog</a>.</li>
<li>
"<a href="http://www.cse.unsw.edu.au/~billw/mldict.html#ID3" lang="en">ID3</a>"
en "<a href="http://www.cse.unsw.edu.au/~billw/mldict.html" lang="en">The
Machine Learning Dictionary</a>".</li>
<li>
"<a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/learning/systems/learn_pl/idt/0.html" lang="en">IDT:
Torgos ID3-like system based on the gain-ratio measure</a>" en <a href="http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/0.html" lang="en">CMU
Artificial Intelligence Repository</a>. Forma parte del directorio de programas
"<a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/learning/systems/learn_pl/0.html" lang="en">Machine
Learning Algorithms Implemented in Prolog</a>".</li>
<li>
Tesis doctoral: <em><a href="http://www.gsi.dit.upm.es/~anto/tesis/html/">Inducción
de Conocimiento con Incertidumbre en Bases de Datos Relacionales Borrosas</a></em>
(A. J. Gómez Flechoso, 1998). En relación con los temas tratados
en este "post", ver el <a href="http://www.gsi.dit.upm.es/~anto/tesis/html/stateart.html">capítulo
2</a> en general, y en particular los apartados <a href="http://www.gsi.dit.upm.es/~anto/tesis/html/stateart.html#pgfId=157054">2.1</a>
(Introducción), <a href="http://www.gsi.dit.upm.es/~anto/tesis/html/stateart.html#pgfId=151149">2.2</a>
(Descubrimiento de conocimiento y minería de datos), <a href="http://www.gsi.dit.upm.es/~anto/tesis/html/stateart.html#pgfId=151014">2.3</a>
(Métodos aplicados de minería de datos), y <a href="http://www.gsi.dit.upm.es/~anto/tesis/html/stateart.html#pgfId=152999">2.4</a>
(Programación Lógica Inductiva).</li>
<li>
<a href="http://www.mlnet.org/" lang="en">MLnet (Machine Learning network)
Online Information Service</a>.</li>
</ul>
<h3><a name="arboles"></a>Anexo - Árboles de decisión</h3>
<p>Los árboles de decisión son una representación de
los procesos involucrados en las tareas de clasificación. Se componen de:</p>
<ul>
<li>
Nodos: nombres o identificadores de los atributos.</li>
<li>
Ramas: posibles valores del atributo asociado al nodo.</li>
<li>
Hojas: conjuntos ya clasificados de ejemplos y etiquetados con el nombre
de una clase.</li>
</ul>
<p>Los nodos reflejan propiedades de los objetos del dominio, los arcos o
ramas son los distintos valores de dichos atributos y las hojas son las
clasificaciones posibles.</p>
<p>[Los árboles de decisión] Se adaptan especialmente bien a aquellos casos en los que:</p>
<ul>
<li>
Los ejemplos pueden ser descritos como pares valor-atributo.</li>
<li>
La función objetivo toma valores discretos.</li>
<li>
Podemos tomar hipótesis con disyunciones.</li>
<li>
Posible existencia de ruido en el conjunto de entrenamiento.</li>
<li>
Los valores de algunos atributos en los ejemplos del conjunto de entrenamiento
pueden ser desconocidos.</li>
</ul>
<p>[Fuente: <a href="http://www.cs.us.es/~delia/sia/html98-99/pag-alumnos/web2/indice.html">Inducción
de Árboles de Decisión: extensiones del <acronym title="Iterative Dichotomizer (version) 3" lang="en">ID3</acronym></a>] [<a href="#ref_arboles">Volver
al texto</a>]</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1131714593194114692005-11-11T14:09:00.000+01:002005-11-13T12:50:05.783+01:00Técnicas mnemotécnicas y acertijos de ingenio<p><strong>Nota:</strong> la primera parte de esta extensa anotación, la más
directamente relacionada con el enunciado del título, ya fue publicada
en mi bitácora hermana, <a href="http://vistoyleido.blogspot.com/">Visto
y Leído</a>, el <a href="http://vistoyleido.blogspot.com/2004_01_01_vistoyleido_archive.html#107421541775470787">16/01/2004</a>,
bajo el mismo título. Al apuntar posteriormente algún enlace
en el que se trata de la aplicación de la programación lógica
en general, y Prolog en particular, a los acertijos de ingenio y los juegos
lógicos, he ido añadiendo otras cuestiones estrictamente
relacionadas con dicho lenguaje de programación, particularmente
relativas a su origen, evolución y algunas de sus versiones desarrolladas
a lo largo del tiempo con más o menos fortuna y permanencia posterior.</p>
<p>En el libro "Ayudando a la memoria. Técnicas y trucos para recordar"
(Plaza & Janes, 2001; ISBN: 84-8450-527-8) su autor, Josep Mª
Albaigès, incluye, como complemento imprescindible a la excelente
descripción que se aborda en el libro respecto de los procesos de
retención, memoria, y técnicas de recuperación o recuerdo
de lo memorizado, un curioso "Diccionario de Mnemotecnias", en el que se
recogen, ordenados alfabéticamente en relación con la cuestión
a la que hacen referencia, toda clase de recursos mnemotécnicos
(de <em>mnemo</em> + <em>tecnia</em>, aquellos que sirven para auxiliar a la
memoria), algunos de cierta complejidad y otros más asequibles,
referidos a aspectos muy variados. En este mismo diccionario se encuentra
la siguiente definición:</p>
<blockquote>
<p>"Llamamos mnemotecnia a cualquier truco o procedimiento abreviado
que permite recordar, de forma más o menos provisional, una cosa
concreta y en general breve."</p>
<div class="cita">En "Ayudando a la memoria...", página 95</div>
</blockquote>
<p>Me quedo para esta ocasión con dos curiosidades referidas al universo
de las clasificaciones, entendidas éstas en sentido amplio (cito
textualmente):</p>
<blockquote>
<p><strong>Clasificación decimal en bibliotecas</strong><br />
Las temáticas de la clasificación decimal suelen ser:
0. Obras Generales - 1. Filosofía - 2. Religión - 3. Ciencias
Sociales - 4. Lengua - 5. Ciencias Puras - 6. Tecnología - 7. Arte
- 8. Literatura - 9. Historia. Que se recuerdan con la frase: "Generales:
¡filosofad religiosamente! Socios: ¡hablad puramente! Técnicos
y artistas: ¡escribid históricamente!".</p>
<p><strong>Taxonomía</strong><br />
La clasificación de las especies naturales comprende los siguientes
escalones: Reino - Tipo - Clase - Orden - Familia - Género - Especie.
Se recuerda esta secuencia, en orden inverso, con la frase: "Una especie
general de familias ordenadas clasifican los tipos del reino".</p>
</blockquote>
<p>Es también muy curiosa la descripción menotécnica
de los <a href="http://www.science.uva.nl/~seop/entries/aristotle-logic/" title="Aristotle's Logic" lang="en">silogismos</a>
(y la forma de recordar las figuras en que los escolásticos los
clasificaron), del número <em>pi</em>, y de varios principios o teoremas
fundamentales de la física y la estadística, entre otros,
pero dada la relativamente amplia extensión de los textos en cuestión,
me remito a la consulta y lectura del libro referenciado, caso de interesar
este tema.</p>
<p>La lógica silogística o <em>aristotélica</em> trata
de determinar la verdad o falsedad de determinado argumento filosófico,
mediante el contraste de proposiciones o <em>premisas</em>, y en cierto sentido
puede ser considerada como una formalización, basada en expresiones
del lenguaje natural, del sentido común. La utilización del
silogismo por parte de los <a href="http://www.webdianoia.com/his_fil/medieval.htm" title="Historia de la filosofÃa medieval">escolásticos</a>
se entiende dada la integración de la filosofía de Aristóteles
en la dogmática cristiana, característica de la tarea de
reflexión desarrollada por este grupo de pensadores de la Filosofía
occidental entre mediados del siglo XI y mediados del siglo XV, aproximadamente.</p>
<p>Josep Mª Albaigès es también editor de la revista
<a href="http://www.mensa.es/carrollia/">Carrollia</a>,</p>
<blockquote>
<p>"[...] órgano de comunicación [...] de <a href="http://www.mensa.es/">Mensa
España</a>, que se dedica a las Matemáticas recreativas,
la Lingüística, la Literatura Experimental, la Lógica,
la Ciencia y todo aquello que hubiera gustado a <a href="http://vistoyleido.blogspot.com/2005_10_01_vistoyleido_archive.html#112879815136038289">Lewis Carroll</a>."</p>
<div class="cita"><a href="http://www.mensa.es/carrollia/">Fuente</a></div>
</blockquote>
<p>Los <a href="http://www.mensa.es/carrollia/listacarr.htm">boletines</a>
de los últimos años están disponibles en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>.
También es muy recomendable, si se está interesado por estos
temas, la "<a href="http://www.juegosmensa.com/">Colección de juegos
de ingenio</a>" (resueltos) del <a href="http://www.mensa.es/">Club Mensa</a>,
gran parte de ellos editados originalmente en las páginas de Carrollia.
En otro orden de "utilidad" práctica, el "<a href="http://www.mensa.es/carrollia/listabofci.htm">Boletín
Oficial de la Facultad de Ciencias Inútiles</a>" (BOFCI) es otra
publicación del Club Mensa cuya lectura conviene no perderse...</p>
<p>Y ya que hablamos, al menos tangencialmente, de juegos lógicos
y de ingenio, mencionar dos bitácoras en lengua castellana dedicadas
de forma monográfica a estos asuntos:
<a href="http://www.geocities.com/juegosdeingenio/">Juegos
de Ingenio & Acertijos</a> y <a href="http://www.markelo.f2o.org/">Pequeños
Enigmas</a>. En este último sitio se localizan un buen número
de enlaces que llevan a otras páginas de temática afín
(ver el apartado "Buenas páginas de ingenio").</p>
<p>Enlazando la cuestión planteada inicialmente con la utilización
de la programación lógica en general, y el lenguaje Prolog
en particular, en la resolución de acertijos y juegos lógicos,
podemos mencionar a modo de ejemplo el excelente trabajo "<a href="http://www.unlu.edu.ar/~gpfl/acertijo.ps">Resolviendo
acertijos con Prolog</a>" (<a href="http://www.unlu.edu.ar/~gpfl/JPhome.htm">J.
Peri</a>, <a href="http://www.unlu.edu.ar">Universidad Nacional de Luján</a>,
Argentina; en formato <a href="http://www.cs.wisc.edu/~ghost/" title="Ghostscript, Ghostview and GSview" lang="en">PostScript</a>),
en el que podemos leer:</p>
<blockquote>
<p>"[...] Prolog puede ser imaginado como un laboratorio de lógica.
Su capacidad para manejar expresiones simbólicas le permite codificar
fácilmente cierto tipo de información que en los lenguajes
procedurales es muy difícil de manejar. La programación lógica
permite traducir en líneas de código descripciones de hechos
e implicaciones, lo que en principio permite codificar líneas de
razonamiento completas."</p>
<div class="cita">En "<a href="http://www.unlu.edu.ar/~gpfl/acertijo.ps" title="Resolviendo acertijos con Prolog">Resolviendo acertijos con Prolog</a>"</div>
</blockquote>
<p>Los ejemplos están escritos en notación <a href="http://www.cs.nps.navy.mil/people/faculty/rowe/book/ae.html" lang="en">Micro-Prolog</a>,
que difiere sustancialmente de la difundida posteriormente como estándar
de facto por el denominado "Prolog de Edimburgo", tal y como se explica
en un apéndice al final del documento (Apéndice II - Diferencias
entre Micro-Prolog y la notación de Edimburgo), si bien la semántica
de ejecución es idéntica en ambos casos. La lógica
subyacente en los ejemplos expuestos es en cualquier caso plenamente válida,
independientemente de la notación con la que se representen.</p>
<p>El autor de este trabajo es coordinador del "<a href="http://www.unlu.edu.ar/~gpfl/">Grupo
de Programación Funcional y Lógica</a>" (<acronym title="Universidad Nacional de Luján">UNL</acronym>, <acronym title="Universidad Nacional de la Pampa">UNP</acronym>,
Argentina), cuyos miembros han publicado también otros interesantes
documentos y trabajos sobre diversos aspectos de la programación
lógica, localizables
<a href="http://www.unlu.edu.ar/~gpfl/wwwunlu.htm#Publicaciones">en
la página web</a> de dicho grupo (tengan paciencia con las descargas,
el servidor es bastante lento, y se demoran un cierto tiempo). La utilización
de la notación de Micro-Prolog en los trabajos de este grupo, se
explica en razón de que sus miembros han desarrollado un intérprete
para Prolog, <a href="http://www.unlu.edu.ar/~gpfl/edulog/wwwunlu.htm">Edulog</a>,
orientado hacia fines educativos y la utilización en sus cursos
y seminarios, que precisamente hace uso de la notación que venimos
comentando. El proyecto parece estar paralizado, al menos en su forma de
comunicación pública, ya que las páginas llevan bastante
tiempo sin ser actualizadas. El prototipo Edulog es accesible <a href="http://www.unlu.edu.ar/~gpfl/F&Lhome.htm#Software">desde
un enlace</a> ubicado en la página de la asignatura "<a href="http://www.unlu.edu.ar/~gpfl/F&Lhome.htm">Programación
Funcional y Lógica</a>", si bien el archivo de descarga está
protegido por contraseña. Supongo que poniéndose en contacto
con los responsables del proyecto, y exponiéndoles las razones por
las que se quiere acceder a su uso, no habrá ningún problema
en conseguir la clave correspondiente.</p>
<p>La notación implementada por Micro-Prolog es más limitada
y menos flexible que la propia del estándar de Edimburgo: así
por ejemplo, los posibles nombres de variables están muy restringidos,
y el intérprete se conformará con la primera solución
que satisfaga el objetivo planteado, en contraposición a lo habitual
en los intérpretes actuales basados en el Prolog estándar,
que es tratar de proporcionar todas las posibles soluciones hasta agotar
la base de conocimientos del programa y las posibilidades de unificación
de las variables en juego. Otras diferencias se refieren a la utilización,
por parte de Micro-Prolog, de predicados predefinidos de carácter particular.</p>
<p>Las diferencias básicas entre ambos tipos de notaciones están
perfectamente explicadas, con ejemplos, en el documento "<a href="http://www.unlu.edu.ar/~gpfl/F&Lhome.htm#Bibliografia">Diferencias
entre la notación de Micro Prolog y la de Edimburgo</a>" que encontramos
en la página de la asignatura mencionada, si bien el archivo comprimido
que sirve como medio de descarga al original en formato Word, está
también protegido por contraseña, por lo que de nuevo se
hace necesario ponerse en contacto con sus autores con el fin de obtener
la pertinente autorización.</p>
<p>Micro-Prolog fue un dialecto del lenguaje Prolog creado alrededor de
1980 para ser ejecutado originalmente en los primeros ordenadores personales,
equipos de poca capacidad de procesamiento y memoria en comparación
con los parámetros actuales, basados en el procesador Z-80 de Zilog <abbr title="Corporation" lang="en">Corp.</abbr>, sucesor del 8085 de Intel, y el <acronym title="Sistema Operativo">S.O.</acronym> <acronym title="Control Program/Monitor" lang="en"><a href="http://www.iacvt.com.ar/cpm.htm">CP/M</acronym></a>,
antecesor del <acronym title="Personal Computer/Microsoft-Disk Operating System" lang="en">PC/MS-DOS</acronym>
(<a href="http://www.nvg.ntnu.no/sinclair/computers/computers.htm" title="The Sinclair Computers" lang="en">ZX
Spectrum</a>, <a href="http://www.hut.fi/Misc/cbm/" lang="en">Commodore
64</a>, <a href="http://www.old-computers.com/" title="old-computers.com" lang="en">etc.</a>).
El compilador e intérprete <a href="http://www.lpa.co.uk/dow_fre.htm" lang="en">LPA
Prolog Professional</a> soporta la notación Micro-Prolog, aunque
hay que advertir que se trata de un "dialecto" completamente en desuso,
dadas sus evidentes limitaciones, siendo la notación del estándar
de Edimburgo (también conocida como sintaxis DECsystem-10) la más
extendida, y por tanto la empleada en la práctica totalidad de las
implementaciones actuales de intérpretes para el lenguaje Prolog.
Desde <a href="http://www.cs.buap.mx/~jpalacio/gimf/HectorJ/ai-verano/prolog.exe">este
otro enlace</a> se puede descargar el intérprete original para Micro-Prolog.</p>
<p><a href="http://clocksin.com/" lang="en">W.F. Clocksin</a> y C.S. Mellish,
en su libro "Programación en Prolog" (Gustavo Gili, 1993; ISBN:
84-252-1339-8), dedican un apartado completo, "Apéndice E - Micro-Prolog",
a la explicación de la sintaxis implementada por Micro-Prolog:</p>
<blockquote>
<p>"La sintaxis de Micro-Prolog es bastante diferente [...] La
idea básica es que sólo existe un tipo de término:
la lista. Si queremos construir el «término» con funtor
<strong>f</strong>
y cuatro argumentos, usamos de hecho una lista de cinco elementos, con
<strong>f</strong>
como la cabeza, y los cuatro argumentos apareciendo sucesivamente como
los elementos restantes. Así, lo que en la sintaxis de nuestro «núcleo»
se escribiría: <strong>f(a,g(2,3),c)</strong> se escribiría en Micro-Prolog:
<strong>(f
(g 2 3) c)</strong>. Aquí también vemos la sintaxis diferente
para listas, en donde las listas van entre paréntesis, con sus elementos
separados por espacios.</p>
<p>Las cláusulas se representan como listas de términos,
en los que el primero es la cabeza de la cláusula, y el resto son
objetivos, que tomados como una conjunción, forman el cuerpo. He
aquí una cláusula más complicada [...]:</p>
<p class="codigo">
((alterar (z1|z2) (x|y))
<br /> (cambiar z1 x)
<br /> (altera z2 y)
<br />)
</p>
<p>Esto es la segunda cláusula de [el predicado] <strong>alterar</strong> de
la sección 3.4. [...]</p>
<p class="codigo">
alterar([H|T],[X|Y]):- cambiar(H,X), alterar(T,Y).
</p>
<p>[...] Los nombres y propósitos de los predicados predefinidos varían
considerablemente de los que se han visto a lo largo de este libro [...]"</p>
<div class="cita">En <em>Programación en Prolog</em>, Apéndice E - Micro-Prolog</div>
</blockquote>
<p>Por otra parte, en Turbo Prolog los programas se dividen en secciones diferenciadas:
<em>dominios</em>, <em>cláusulas</em>, <em>predicados</em>, <em>base de
datos</em> y <em>objetivos</em>. La explicación, tanto sobre la sintaxis
de Micro-Prolog, como sobre otros aspectos generales de este dialecto (predicados
predefinidos particulares, facilidades para la depuración del código,
etc.), tiene cierta extensión, por lo que me remito a la obra referenciada
para obtener más información al respecto, y en particular,
además de al referido Apéndice E, a los apéndices
"C - Diferentes versiones de Prolog" (ofrece una breve visión general
sobre este particular), y "D - Prolog del DECsystem-10".</p>
<p><a href="http://www.info.ucl.ac.be/people/cvvanroy.html" lang="en">Peter
Van Roy</a> (<a href="http://www.ucl.ac.be/" lang="fr">Universidad Católica
de Lovaina</a>, Bélgica, <abbr title="Departamento"><a href="http://www.info.ucl.ac.be/" lang="en">Dpto.</abbr>
de Ingeniería Informática</a>), una de las figuras más
destacadas en el mundo de la programación lógica, es autor
de un artículo, de lectura más que recomendable, referido
a la evolución del lenguaje Prolog en la década que transcurre
a partir de la aparición de la arquitectura <acronym title="Warren Abstract Machine" lang="en">WAM</acronym>:
"<a href="http://www.info.ucl.ac.be/people/PVR/official_report.ps">1983-1993:
The Wonder Years of Sequential Prolog Implementation</a>" (en formato <acronym title="PostScript" lang="en">PS</acronym>):</p>
<blockquote>
<p>"This report surveys the major developments in sequential Prolog
implementation during the period 1983-1993. In this decade, implementation
technology has matured to such a degree that Prolog has left the university
and become useful in industry. The survey is divided into four parts. The
first part gives an overview of the important technical developments starting
with the Warren Abstract Machine (WAM). The second part presents the history
and the contributions of the major software and hardware systems. The third
part charts the evolution of Prolog performance since Warren?s DEC-10 compiler.
The fourth part extrapolates current trends regarding the evolution of
sequential logic languages, their implementation, and their role in the marketplace."</p>
<p>"By 1983 Warren had developed the WAM, a structure-copying execution
model for Prolog that has become the de facto standard implementation technique
[...]. The WAM defines a high-level instruction set that maps closely to
Prolog source code. [...]"</p>
<div class="cita">En "<a href="http://www.info.ucl.ac.be/people/PVR/official_report.ps">1983-1993:
The Wonder Years of Sequential Prolog Implementation</a>"</div>
</blockquote>
<p>La tesis doctoral de Peter Van Roy versaba precisamente sobre la implementación
de la <acronym title="Warren Abstract Machine" lang="en">WAM</acronym>:
"<a href="http://www2.info.ucl.ac.be/people/PVR/Peter.thesis/Peter.thesis.html" lang="en">Can Logic Programming Execute as Fast as Imperative Pro-gramming?</a>" (PhD
Thesis, Department of Computer Science, U.C. Berkeley, Report UCB/CSD 90/600, 1990).</p>
<p>La aparición de la Máquina Abstracta de Warren o <acronym title="Warren Abstract Machine" lang="en">WAM</acronym> (David H.D. Warren, 1983) supuso un punto de inflexión en la evolución
del lenguaje Prolog, por cuanto comportaba la definición de un conjunto
de instrucciones de alto nivel y un modelo de ejecución para este
lenguaje, y la materialización de la <a href="http://www.clip.dia.fi.upm.es/~vocal/public_info/">programación lógica
con restricciones</a> (Constraint Logic Programming, CLP). Supone la base, adoptada como estándar de facto, para la implementación
de intérpretes portables para el lenguaje Prolog, convirtiéndolo
en un lenguaje multipropósito con características similares
a las de los lenguajes compilados de carácter procedimental, en
lo que alos tiempos de ejecución se refiere. Así, en el sitio
web del intérprete SWI-Prolog leemos:</p>
<blockquote>
<p>"SWI-Prolog is a Prolog implementation based on a subset of the WAM (Warren Abstract Machine)."</p>
<p>"[...] is based on a very restricted form of the <acronym title="Warren Abstract Machine" lang="en">WAM</acronym> [...] described in <em><a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/Bibliography.html#Bowen:83" lang="en">Bowen
& Byrd, 1983</a></em> which defines only 7 instructions. Prolog can
easily be compiled into this language and the abstract machine code is
easily decompiled back into Prolog. As it is also possible to wire a standard
4-port debugger in the <acronym title="Warren Abstract Machine" lang="en">WAM</acronym> interpreter there is no need for a distinction between compiled and interpreted
code. Besides simplifying the design of the Prolog system itself this approach
has advantages for program development: the compiler is simple and fast,
the user does not have to decide in advance whether debugging is required
and the system only runs slightly slower when in debug mode. The price
we have to pay is some performance degradation (taking out the debugger
from the <acronym title="Warren Abstract Machine" lang="en">WAM</acronym>
interpreter improves performance by about 20%) and somewhat additional
memory usage to help the decompiler and debugger."</p>
<p>"SWI-Prolog extends the minimal set of instructions described in <em><a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/Bibliography.html#Bowen:83" lang="en">Bowen
& Byrd, 1983</a></em> to improve performance. While extending this set
care has been taken to maintain the advantages of decompilation and tracing
of compiled code. The extensions include specialised instructions for unification,
predicate invocation, some frequently used built-in predicates, arithmetic,
and control (<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/control.html#;/2" lang="en">;/2</a>,
<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/control.html#|/2" lang="en">|/2</a>),
if-then (<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/control.html#send_arrow/2" lang="en">->/2</a>)
and negation-by-failure (<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/control.html#\+/1" lang="en">\+/1</a>)."</p>
<div class="cita">En <a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/" lang="en">SWI-Prolog
Reference Manual</a> - <a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/swiprolog.html" lang="en">1.1 SWI-Prolog</a></div>
</blockquote>
<p>La función de esta máquina virtual, dentro del núcleo
del intérprete, es compilar las instrucciones escritas en lenguaje
de alto nivel a instrucciones en lenguaje máquina, de forma similar
a como lo hace la máquina virtual Java (<acronym title="Java Virtual Machine" lang="en">JVM</acronym>).
La arquitectura WAM ha permitido en consecuencia desarrollar versiones
de Prolog "compilado" a nivel de ejecución, aun cuando los programas
se sigan guardando y ejecutando desde archivos que contienen código
escrito en lenguaje de alto nivel. De manera general, una máquina
virtual es por tanto un procedimiento abstracto para ejecutar conjuntos
de instrucciones escritas en un lenguaje formal, como puede ser en este
caso Prolog.</p>
<blockquote>
<p>"[...] si utilizamos un entorno de programación interpretado
de Prolog [...] la eficiencia, en cuanto a velocidad de ejecución
se refiere, disminuye, al igual que en cualquier lenguaje interpretado,
frente a un lenguaje compilado.</p>
<p>El conjunto de instrucciones de las computadoras actuales resulta muy
pobre en relación con la semántica de Prolog, por lo que
la mayoría de los compiladores de Prolog [...] realizan una compilación
a un lenguaje intermedio en vez de hacerlo directamente a lenguaje máquina.
El lenguaje más popular es el Warren Abstract Machine (WAM) [...]
conjunto de instrucciones abstractas utilizable en Prolog y que se puede
interpretar o traducir a lenguaje máquina. Existen otros compiladores
que traducen Prolog a un lenguaje de alto nivel como Lisp o C, y utilizan
dicho compilador para traducir a lenguaje máquina.</p>
<p>Antes del trabajo de Warren sobre la compilación de la inferencia
en Prolog, la programación lógica resultaba excesivamente
lenta para su uso generalizado. Los compiladores diseñados por Warren
y otros permitieron a Prolog alcanzar velocidades adecuadas [...] En fechas
más recientes, la aplicación de la moderna tecnología
de compilación [...] ha permitido a Prolog alcanzar velocidades
tan óptimas que lo hace competir con C en cuanto a diversos aspectos
estándar [...]. [...] el hecho de poder escribir un planificador
o un analizador de lenguaje natural en unas cuantas decenas de líneas
de Prolog, hacen que éste sea más preferible que C en la
realización de los prototipos de gran parte de los proyectos de
investigación de <acronym title="Inteligencia Artificial">IA</acronym>
a escala reducida."</p>
<div class="cita"><a href="http://www.uhu.es/nieves.pavon/pprogramacion/temario/tema4/tema4.html#_Toc495058042">Fuente</a>
(<a href="http://www.uhu.es/nieves.pavon/pprogramacion/">estructura general de marcos</a> de
la página citada)</div>
</blockquote>
<p>Más información al respecto: "<a href="http://www.vanx.org/archive/wam/wambook.pdf" lang="en">Warrens's
Abstract Machine: A Tutorial Reconstruction</a>" (en <acronym title="Portable Document Format" lang="en">PDF</acronym>;
Hassan Aït-Kaci; The MIT Press, Cambridge, MA, 1991).</p>
<p>En el siguiente trabajo se describe el sistema y la notación
DECsystem-10 Prolog, en la que se basa el estándar de Edimburgo,
que recordemos es de facto el sistema Prolog estándar en la actualidad,
recogido la norma ISO vigente referida a este lenguaje (ISO/IEC 13211-1:1995
Part 1: General core):</p>
<blockquote>
<p>"<a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/doc/intro/prolog.doc">DECsystem-10
Prolog User's Manual</a>". D.L. Bowen (ed.), L. Byrd, F.C.N. Pereira, L.M.
Pereira, and D.H.D. Warren, Department of Artificial Intelligence, University
of Edinburgh, November 10, 1982.</p>
</blockquote>
<p>Si bien el formato del anterior documento es ".doc", se trata realmente
de un archivo de texto plano, por lo que se descoloca la disposición
del mismo si se abre con <acronym title="MicroSoft" lang="en">MS</acronym>
Word. También: <a href="http://www.cs.uah.edu/~thinke/Prolog/prolog.html">versión
en HTML</a>, y <a href="http://proton.ucting.udg.mx/tutorial/prolog/index.htm">traducción
al castellano</a> de este manual, limitada a los tres primeros capítulos.</p>
<p>El DECsystem-10 Prolog fue una implementación creada y desarrollada
(1977, 1980) por D. Warren y otros (F. Pereira, L. Byrd, L. Pereira) en
el Departamento de Inteligencia Artificial de la Universidad de Edimburgo,
para operar en sistemas informáticos DECsystem-10. Junto con el
Prolog descrito en la obra referenciada de Clocksin y Mellish, las versiones
del DEC-10 Prolog y sus posteriores desarrollos constituyen la base del
estándar o sintaxis de Edimburgo.</p>
<p>Las iniciales DECsystem-10 hacen referencia al sistema informático
sobre el que se basó la implementación Prolog de la Universidad
de Edimburgo que venimos comentando, fabricado por
<a href="http://www.research.microsoft.com/~gbell/Digital/DECMuseum.htm" title="CyberMuseum for Digital Equipment Corp (DEC)" lang="en">Digital
Equipment <abbr title="Corporation" lang="en">Corp.</abbr></a> Los
DECsystem-10/20 eran sistemas de <a href="http://www.research.microsoft.com/~gbell/Digital/timeline/36-bit.htm" lang="en">arquitectura
de 36-bit</a>, cuyas primeras versiones datan del año 1971. Cuando
hablamos de este tipo de sistemas no hay que pensar en los <acronym title="Personal Computer" lang="en">PC</acronym>s,
posteriores en el tiempo y orientados inicialmente hacia otro tipo de usuario
final, sino que se trataba de equipos situados, por potencia de procesamiento
y cálculo (y todo sea dicho, por dificultad de manejo y operación),
en la escala de los grandes equipos informáticos conocidos como
"mainframes". No es infrecuente encontrar, en guías y manuales antiguos
del lenguaje Prolog (por ejemplo los referidos a C-Prolog [<a href="http://kilo.ee.lsu.edu/koppel/ee4785/prolog.html" title="C-Prolog User's Manual" lang="en">en
HTML</a>] [<a href="ftp://ftp.ee.lsu.edu/pub/koppel/ee4785/prolog.ps">en <acronym title="PostScript" lang="en">PS</acronym></a>],
y en general a las implementaciones derivadas de la primera especificación
DECsystem-10 Prolog), referencias a TOPS-20, evolución de los DECsystem-10/20,
y a otros sistemas de <acronym title="Digital Equipment Corporation" lang="en">DEC</acronym>.</p>
<p>Sobre la base de este primer intérprete-compilador para Prolog
se creó, en 1983, uno de los primeros intérpretes puros para
dicho lenguaje, <a href="http://kilo.ee.lsu.edu/koppel/ee4785/prolog.html" title="C-Prolog User's Manual" lang="en">C-Prolog</a>
(F. Pereira, D. Bowen, L. Byrd), escrito en lenguaje C, que contribuyó
a consolidar el estándar de Edimburgo, como referencia para posteriores
implementaciones.</p>
<p>Para finalizar esta anotación, mencionar el ejemplo de aplicación
práctica del lenguaje Prolog a la resolución de juegos y
acertijos lógicos descrito en "<a href="http://www.sunyit.edu/~millerd1/RUBIK.HTM" lang="en">Solving
Rubik's Cube Using the Bestfast Algorithm and Profile tables - A Prolog
program and demonstration of an efficient heuristic search method</a>"
(por <a href="http://www.sunyit.edu/~millerd1/" lang="en">D.L. Winston
Miller</a>). Como el propio título indica, en este texto se explica
el fundamento teórico y el funcionamiento de un programa diseñado
para efectuar la búsqueda de los mejores métodos posibles
de resolución del problema planteado por el famoso <a href="http://www.microsiervos.com/rompecabezas.html">Cubo
de Rubik</a>. Los archivos que conforman el programa (ver al final del
documento) están escritos originalmente para ser ejecutados bajo
el intérprete <a href="http://www.arity.com/www.pl/products/ap.htm" lang="en">Arity
Prolog</a> (de uso libre) si bien, al soportar la notación y <a href="http://www.arity.com/www.pl/products/appreds.htm" lang="en">predicados</a>
del estándar de Edimburgo, el programa en principio debería
también poder ejecutarse correctamente bajo <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>.</p>
<p>El programa hace uso de un algoritmo de búsqueda <a href="http://www.cogs.susx.ac.uk/local/books/ai-through-search/ch04/ch04-uh-6.html" title="Ordered search and the A* Algorithm" lang="en">A*</a>
(<a href="http://www.sju.edu/~jhodgson/ai/astar.html">ejemplo</a>), basado
en el tipo conocido como "best-first search", derivado a su vez del método
de búsqueda "breadth-first search" o "búsqueda primero en
anchura" (<a href="http://www.sju.edu/~jhodgson/ai/bfs.html" lang="en">ejemplo</a>),
que evalúa cada nodo del mismo nivel, dentro del árbol de
búsqueda (entendiendo por tal la representación en forma
de grafo dirigido -los nodos que lo forman están conectados mediante
flechas que indican la dirección del movimiento- de un determinado
problema de búsqueda), antes de continuar el proceso en el siguiente
nivel de profundidad. En contraposición a este método se
sitúa la búsqueda "depth-first" o "primero en profundidad"
(<a href="http://www.sju.edu/~jhodgson/ai/dfs.html" lang="en">ejemplo</a>),
en la que se explora cada "rama" del árbol hasta llegar al "nodo
terminal", antes de proceder a la búsqueda por otro camino. Este
es precisamente el tipo de búsqueda "interna" por defecto que lleva
a cabo el lenguaje Prolog (búsqueda en profundidad y de izquierda
a derecha en un árbol And-Or) dentro de la base de conocimientos
compilada, al tratar de satisfacer los objetivos.</p>
<blockquote>
<p>"The A* [...] is an efficient and widely used <a href="http://www.generation5.org/glossary/display.asp?uri=pathing.xml" lang="en">pathing</a>
algorithm. The A* keeps track of the cost of getting from point A to point
B and the overall cost of getting from the beginning point to the end point.
The algorithm follows the path of least cost to find a solution. The A*
uses up a lot of memory and can be very slow on rough terrain - therefore
it is not used for real-time robotics <a href="http://www.generation5.org/glossary/display.asp?uri=pathing.xml" lang="en">pathing</a> too often."</p>
<div class="cita"><a href="http://www.generation5.org/glossary/display.asp?uri=astar.xml" lang="en">Fuente</a></div>
</blockquote>
<p>A los dos tipos básicos de algoritmos de búsqueda mencionados
(existen otros muchos), se les pueden añadir eventualmente métodos
heurísticos de evaluación, consistentes en reglas capaces
de valorar si, en base a determinado tipo de información previa,
la búsqueda está siguiendo el camino correcto, para de esta
forma aumentar la probabilidad de dar con la solución correcta.
Los métodos heurísticos tratan de aplicar dos criterios de
búsqueda: a) elección de los caminos que es posible que fallen
con mayor probabilidad, para de esta forma "podar" el espacio de búsqueda
y así reducir su tamaño, o bien b) comprobación, en
primer lugar, de los caminos con mayor probabilidad de éxito. Las
búsquedas heurísticas son por tanto búsquedas basadas
en la experiencia. La adición de capacidades heurísticas
a los métodos de búsqueda "breadth-first", da lugar a los
algoritmos "best-first search", como el A* utilizado en el programa aplicado
a la resolución de los estados del Cubo de Rubik.</p>
<p>Estos tres tipos básicos de algoritmos de búsqueda, así
como los conceptos y teoremas básicos de la Teoría de Grafos
[<a href="http://emis.library.cornell.edu/monographs/Diestel/en/download.html" title="Graph Theory by Reinhard Diestel" lang="en">1</a>]
[<a href="http://es.wikipedia.org/wiki/Teor%EDa_de_grafos" title="En Wikipedia, la enciclopedia libre">2</a>]
[<a href="http://en2.wikipedia.org/wiki/Graph_theory" title="Graph theory. From Wikipedia, the free encyclopedia" lang="en">3</a>]
necesarios para la comprensión y conocimiento de sus mecanismos
de funcionamiento, se describen ampliamente en los capítulos 11.
"Basic Problem-Solving Strategies", 12. "Best First: A Heuristic Search
Principle", y 13. "Problem Reduction and AND/OR Graphs" de la obra de Ivan
Bratko "Prolog programming for Artificial Intelligence" (Addison-Wesley,
1994; ISBN: 0-201-41606-9).</p>
<p>Por otra parte "<a href="http://www.cogs.susx.ac.uk/local/books/ai-through-search/index.html" lang="en">Artificial
Intelligence Through Search</a>" (C.J. Thorton, B. du Boulay) es un libro
que aborda de forma especifica la cuestión de los métodos
y algoritmos utilizados en espacios de búsqueda (definidos éstos
por el conjunto de todos los nodos de un grafo dirigido). Desafortunadamente,
en la versión electrónica de este libro se pierden gran parte
de las figuras y esquemas del original impreso, lo cual dificulta la comprensión de estas cuestiones, que de por si tienen cierta complejidad.</p>
<p>Más información:</p>
<ul class="conmargeninf">
<li>
"<a href="http://www.dccia.ua.es/~faraon/docs/juegos.pdf">Los Juegos como
Herramienta Docente. Formalización de Juegos Lógicos en Prolog</a>"
(<a href="http://www.dccia.ua.es/~faraon/principal.htm">F. Llorens</a>,
Mª Jesús Castel, F. Mora y C. Villagrá; en <acronym title="Portable Document Format" lang="en">PDF</acronym>).</li>
<li>
<a href="http://www.fraber.de/university/prolog/tprolog.html" lang="en">Turbo
Prolog</a>.</li>
<li>
Early History of Prolog: <a href="http://www.lim.univ-mrs.fr/~colmer/ArchivesPublications/HistoireProlog/19november92.pdf" lang="en">The
birth of Prolog</a> / <a href="http://www.lim.univ-mrs.fr/~colmer/ArchivesPublications/HistoireProlog/24juillet92.pdf">La
naissance de Prolog</a> (en <acronym title="Portable Document Format" lang="en">PDF</acronym>;
P. Roussel).</li>
<li>
<a href="http://tcl.sfs.nphil.uni-tuebingen.de/~cornell/prolog/" lang="en">Notas de curso</a> sobre Prolog: <a href="http://tcl.sfs.nphil.uni-tuebingen.de/~cornell/prolog/Graphs-root.html" lang="en">Chapter
7 Graphs</a> (representación de grafos en Prolog).</li>
<li>
<a href="http://www.cs.ubc.ca/spider/poole/ci/ci_code.html" lang="en">Código fuente</a> de algunos algoritmos A*.</li>
<li>
Otro ejemplo de implementación del algoritmo de búsqueda
A* en Prolog, y en dos versiones: a) en <a href="http://perso.wanadoo.fr/colin.barker/tpro1/astar.htm">sintáxis
Turbo Prolog</a>, compatible con <a href="http://www.visual-prolog.com" lang="en">Visual
Prolog</a> + <a href="http://perso.wanadoo.fr/colin.barker/lpa/idastar.htm" lang="en">IDA*</a>
(Iterative Deepening A* search); y b) en <a href="http://perso.wanadoo.fr/colin.barker/lpa/astar.htm">sintáxis
LPA Win-Prolog</a>.</li>
<li>
<a href="http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/5_1.html" lang="en">The
A* algorithm in Prolog</a> (en <a href="http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html" lang="en">Prolog
Tutorial</a> de <a href="http://www.csupomona.edu/~jrfisher/www/" lang="en">J.R.Fisher</a>).</li>
<li>
<a href="http://www.generation5.org/content/2000/astar.asp" lang="en">A*
for the Masses</a> (en <a href="http://www.generation5.org/" lang="en">generation5.org</a>).</li>
</ul>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com1tag:blogger.com,1999:blog-5454882.post-1121855429559863402005-07-20T12:29:00.000+02:002005-07-20T12:42:10.163+02:00Selección de enlaces<p>Siguiendo con la práctica introducida meses atrás en este
sitio, a continuación reseño una serie artículos,
anotaciones, y enlaces diversos, recopilados en las últimas semanas
(los entrecomillados son citas textuales tomadas de los sitios referenciados):</p>
<h3>Artículos, introducciones, anotaciones de "blogs":</h3>
<ul class="conmargeninf">
<li>
<a href="http://www.logicandlanguage.net/archives/2005/04/searching_for_l_1.html" lang="en">Searching
for Logic</a> (en <a href="http://www.logicandlanguage.net/" lang="en">Logic
and Language</a>). Esta anotación versa sobre la aplicación
de las leyes de la lógica al ámbito de las búsquedas
en los catálogos de bibliotecas.</li>
<li>
<a href="http://www.emis.de/journals/DM/v62/art8.pdf">Algunas Experiencias
en la Utilización de Sistemas de EAC para la Enseñanza de
la Inteligencia Artificial</a> (<acronym title="Portable Document Format" lang="en">PDF</acronym>;
M. Lezcano, V. Giraldo Valdés; en <em><a href="http://www.emis.de/journals/DM/">Divulgaciones
Matemáticas</a></em>, <a href="http://www.emis.de/journals/DM/vol6-2.htm">vol.
6 nº. 2</a>, 1998). EAC = Enseñanza Asistida por Computadora
(en inglés CAI, <em>Computer Aided Instruction</em>, o bien <em>Computer-assisted Instruction</em>).</li>
<li>
<a href="http://developers.slashdot.org/article.pl?sid=05/04/28/1936206&tid=156&tid=6" lang="en">Practical
Common Lisp</a> (acerca del <a href="http://www.gigamonkeys.com/book/" lang="en">libro
de Peter Seibel</a>; en <a href="http://slashdot.org/" lang="en">Slashdot</a>).</li>
<li>
<a href="http://www.archivodenessus.com/articulos/018/">Lingüística
y ciencia ficción</a> (por Xavier Riesco Riquelme, en <a href="http://www.archivodenessus.com/">El
archivo de Nessus</a>). "El único género literario que se
ha ocupado de la lingüística como tal de forma constante, al
menos en los últimos años, es que se sepa, el conocido como
ciencia ficción. No sólo desde el punto de vista temático
de una novela, sino también desde el punto de vista de la crítica
literaria y el ensayo. Normalmente muchos libros del género contienen
elementos lingüísticos como subsidiarios a la idea central. [...]".</li>
<li>
<a href="http://www.javaworld.com/javaworld/jw-06-2003/jw-0620-protege.html" lang="en">An <acronym title="Artificial Intelligence" lang="en">AI</acronym>
tool for the real world - Knowledge modeling with Protégé</a>
(H. Knublauch; en <a href="http://www.javaworld.com/" lang="en">JavaWorld</a>,
junio 2003): "While artificial intelligence (AI) is often regarded as an
exotic academic playground, its tools and techniques have matured to contribute
to real-world software technology as well. This article introduces <a href="http://protege.stanford.edu/" lang="en">Protégé</a>,
arguably the most successful open source knowledge-modeling platform. Using
Protégé, developers and domain experts can build conceptual
models and knowledge bases and access them via an easy-to-use Java <acronym title="Application Programming Interface" lang="en">API</acronym>.
The resulting models can implement decision-support systems, capture software
requirements, populate databases, generate Java classes and <acronym title="Unified Modeling Language" lang="en">UML</acronym> diagrams, share and reuse domain models, and access the Semantic Web.".</li>
<li>
<a href="http://www.geocities.com/ateologia2001/falacias1.html">Falacias
y errores de lógica</a>. "[...] Hay una cierta cantidad de errores
que uno debe evitar al construir argumentos deductivos. Algunos son errores
formales de lógica [...] otros representan errores de concepto o
actitudes inaceptables. Se conocen como falacias; de un argumento que resulta
invalidado por una falacia se dice que es "falaz". [...]".</li>
<li>
<a href="http://www.programacion.com/java/tutorial/jap_data_alg/">Estructuras
de Datos y Algoritmos en Java</a> (J. Friesen, traducido por J. A. Palos;
en <em><a href="http://www.programacion.com/java/">Java en castellano</a></em>).</li>
<li>
<a href="http://vidaartificial.com/?q=node/99">Una introducción
a los Sistemas Expertos</a> (en <a href="http://vidaartificial.com/">Vida
Artificial</a>). Este artículo incluye una descripción de
<a href="http://homepage.ntlworld.com/peterhi/sie.html" lang="en">SIE</a>
(Simple Inference Engine), motor de inferencia que permite desarrollar
pequeños sistemas expertos, utilizando el lenguaje <acronym title="Extensible Markup Language" lang="en">XML</acronym> para almacenar la base de conocimientos.</li>
<li>
<a href="http://www.cs.nyu.edu/pipermail/fom/2005-May/008956.html" lang="en">Primer
on vagueness</a> (<a href="http://www.st-andrews.ac.uk/academic/philosophy/STAFF/shapiro.html" lang="en">S.
Shapiro</a>; vía <a href="http://www.ucalgary.ca/~rzach/logblog/2005/05/primer-on-vagueness.html" lang="en">LogBlog</a>): "[...] primer on the philosophical and logical issues
concerning vagueness. [...]".</li>
<li>
Entropía y cantidad de información: [<a href="http://blogia.com/tiopetrus/index.php?idarticulo=200506131">1</a>]
[<a href="http://blogia.com/tiopetrus/index.php?idarticulo=200506141">2</a>]
[<a href="http://blogia.com/tiopetrus/index.php?idarticulo=200506151">3</a>]
[<a href="http://blogia.com/tiopetrus/index.php?idarticulo=200506161">4</a>]
("[...] Nuestro propósito es definir dos conceptos relativos a las
variables aleatorias: cantidad de información y entropía.
[...]"; en <a href="http://www.blogia.com/tiopetrus/">Tio Petros</a>).</li>
</ul>
<h3>Páginas y sitios <em>web</em>:</h3>
<ul class="conmargeninf">
<li>
<a href="http://blogic.phpwebhosting.com/" lang="en">blogic, an interactive
introduction to logic</a> (J. David Velleman). "[...] <a href="http://blogic.phpwebhosting.com/Logic/" lang="en">blogic</a>
is an interactive web-based textbook in introductory logic. The textbook
includes interactive exercises that automatically correct the student's work. [...]".</li>
<li>
<a href="http://www.semanticweb.gr/TheaOWLParser/" lang="en">Thea: A Web
Ontology Language - OWL Parser for [SWI] Prolog</a>: "Thea is a Prolog
implementation of an OWL parser. [...] uses SWI-Prolog?s Semantic Web library
for parsing RDF/XML serialisations of OWL documents into RDF triples and
then it builds a representation of the OWL ontology as it is defined in
the OWL Web Ontology Language Semantics and Abstract Syntax part of the
OWL specification. The OWL ontology abstract syntax is implemented as Prolog terms."</li>
<li>
<a href="http://www.acm.org/pubs/tocl/" lang="en"><acronym title="Association for Computing Machinery" lang="en">ACM</acronym>
Transactions on Computational Logic</a> (TOCL). El texto completo de los
artículos publicados en los volúmenes aparecidos hasta el
momento (1, 2, 3, 4, 5, y 6; años 2000-2005), pueden localizarse,
en formato <a href="http://www.cs.wisc.edu/~ghost/" lang="en">PostScript</a>,
en el apartado <a href="http://www.acm.org/pubs/tocl/accepted.html" lang="en">Accepted Papers</a>.</li>
<li>
<a href="http://home.andrej.com/math/" lang="en">Mathematics and Computation</a>. Como expresa el título, una bitácora en inglés dedicada a esos temas.</li>
<li>
<a href="http://www.phil.cam.ac.uk/teaching_staff/Smith/LaTeX/" lang="en">LaTeX
for Logicians</a> ("A guide to resources of interest to logicians, philosophers
and others using LaTeX to produce papers or presentations, teaching materials,
theses or books, and in particular wanting to include logical matter such
as natural deduction proofs.").</li>
<li>
<a href="http://www.mindswap.org/" lang="en">Mindswap</a> ("The Semantic
Web Research Group is a group of people working with Semantic Web technology
inside the MIND LAB at University of Maryland Institute for Advanced Computer Studies").</li>
<li>
<a href="http://consequently.org/" lang="en">consequently.org</a> (Sitio
personal de Greg Restall, Departamento de Filosofía, Universidad de Melbourne).</li>
<li>
<a href="http://www.computationaltruth.net/blog/" lang="en">Computational
Truth</a> ("[...] <a href="http://www.computationaltruth.net/homepage.html" lang="en">Peter
Gerdes</a>'s blog about philosophy and the occasional bit of mathematical logic. [...]").</li>
</ul>
<h3>Conferencias, congresos:</h3>
<ul class="conmargeninf">
<li>
<a href="http://personal.lse.ac.uk/willia11/progic2005/" lang="en">Progic
2005</a> ("Second workshop on Combining Probability and Logic: Special
focus on Objective Bayesianism"; Centre for Philosophy of Natural and Social
Science, London School of Economics, 6-8 julio 2005).</li>
<li>
<a href="http://lcsd05.cs.tamu.edu/" lang="en">Library-Centric Software
Design LCSD'05</a> (Taller de trabajo que se celebrará en el marco
de la conferencia <em>Object-Oriented Programming, Systems, Languages and Applications</em>
<a href="http://oopsla.org/" lang="en">OOPSLA'05</a>, San Diego, California,
16-20 de octubre 2005): "Libraries are central to all major scientific,
engineering, and business areas, yet the design, implementation, and use
of libraries are underdeveloped arts. This workshop is one of the first
steps in the process of placing all aspects of libraries on a sound technical
and scientific basis through research into fundamental issues and documentation
of best practices. [...]"</li>
</ul>
<p>A propósito de uno de los sitios referenciados (<a href="http://home.andrej.com/math/" lang="en">Mathematics
and Computation</a>), quiero hacer notar el sencillo sistema implementado
en él para dotar a los textos de contenido y simbología matemática,
haciendo para ello uso de un <em>script</em> de JavaScript denominado <a href="http://www1.chapman.edu/~jipsen/mathml/asciimath.html" lang="en">ASCIIMathML</a>,
del que hablaré más adelante.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1115470035016062962005-05-07T14:46:00.000+02:002005-05-09T11:05:29.676+02:00Representación del conocimiento en la Web Semántica<p>Dentro de la enorme bibliografía publicada sobre la <em>Web Semántica</em>
[<a href="http://www.w3.org/2001/sw/" lang="en">1</a>] [<a href="http://www.wshoy.sidar.org/">2</a>]
[<a href="http://www.semanticweb.gr/" lang="en">3</a>] [<a href="http://www.semanticplanet.com/" lang="en">4</a>]
[<a href="http://f14web.com.ar/inkel/">5</a>], voy a recomendar en esta
ocasión la lectura de dos artículos:</p>
<ul>
<li>
<em><a href="http://www.sciam.com/linktous.cfm?articleID=00048144-10D2-1C70-84A9809EC588EF21" lang="en">The
Semantic Web</a></em> (<a href="http://www.w3.org/People/Berners-Lee/" lang="en">T.
Berners-Lee</a>, J. Hendler, <a href="http://www.lassila.org/blog/" lang="en">O.
Lassila</a>; en <em><a href="http://www.sciam.com/" lang="en">Scientific
American</a></em>, 2001).</li>
<li>
<em><a href="http://www.ksl.stanford.edu/KSL_Abstracts/KSL-01-02.html" lang="en">The
Role of Frame-Based Representation on the Semantic Web</a></em> (O. Lassila, D. McGuinness; 2001).</li>
</ul>
<p>El primero es un texto de carácter introductorio y divulgativo,
muy difundido y citado, perfecto para obtener una visión general
sobre la cuestión, del que me gustaría destacar especialmente
el apartado "Knowledge Representation" por estar muy relacionado con tema
tratado en el segundo texto.</p>
<p>En "The Role of..." los autores proponen el esquema de representación
del conocimiento (<acronym title="Knowledge Representation" lang="en">KR</acronym>)
basado en marcos (<em>frame-based representation</em>) como un paradigma
para la construcción de ontologías -necesarias en su opinión
para la construcción de la <em>web semántica</em>-, y para
la conceptualización del lenguaje formal <a href="http://www.w3.org/RDF/" lang="en"><acronym title="Resource Description Framework" lang="en">RDF</acronym></a>
[<a href="http://www.w3.org/RDF/" lang="en">1</a>] [<a href="http://www.bib.uc3m.es/~mendez/publicaciones/7jc99/rdf.htm">2</a>]
[<a href="http://www.xml.com/pub/a/2001/01/24/rdf.html" lang="en">3</a>]
[<a href="http://www.dlib.org/dlib/may98/miller/05miller.html" lang="en">4</a>]
[<a href="http://www.ilrt.bris.ac.uk/discovery/rdf/resources/" lang="en">5</a>],
propuesto a tal fin como esquema básico por el <a href="http://www.w3.org/" lang="en"><acronym title="World Wide Web" lang="en">WWW</acronym>
Consortium</a> como expresión de la representación basada
en marcos de la propia <acronym title="World Wide Web" lang="en">WWW</acronym>.</p>
<p>La representación basada en marcos es un tipo de <a href="http://elies.rediris.es/elies9/4-3.htm">representación
formal del conocimiento</a>, derivada del esquema general de las <a href="http://elies.rediris.es/elies9/4-3-2.htm">redes
semánticas</a> (ver concretamente el apartado "<a href="http://elies.rediris.es/elies9/4-3-2.htm#4.3.2.3">4.3.2.3
Esquemas de marcos</a>" dentro del texto enlazado). Por otra parte, las
redes semánticas son un mecanismo de representación muy empleado
en el ámbito de la Inteligencia Artificial (IA). En esta <em><a href="http://www.ia.uned.es/~seve/docencia/intro-ia/libros/materia.html">Introducción
a la Inteligencia Artificial</a></em> se ofrece, además de una perspectiva
histórica general de la <acronym title="Inteligencia Artificial">IA</acronym>,
una buena aproximación teórica a los modelos formales de
representación del conocimiento y sus dominios de aplicación:
ver en particular los apartados <em><a href="http://www.ia.uned.es/~seve/docencia/intro-ia/libros/materia.html#etapa2">Modelos
simbólicos simples de propósito general</a></em>, <em><a href="http://www.ia.uned.es/~seve/docencia/intro-ia/libros/materia.html#etapa3">El
conocimiento del dominio y su parcelación</a></em>, y <em><a href="http://www.ia.uned.es/~seve/docencia/intro-ia/libros/materia.html#etapa4">Aspectos
metodológicos y distribución del conocimiento</a></em>. El
esquema de representación del conocimiento basado en marcos fue
propuesto inicialmente por el profesor del <acronym title="Massachusetts Institute of Technology" lang="en">MIT</acronym>
<a href="http://web.media.mit.edu/~minsky/" lang="en">Marvin Minsky</a> -pionero de la <acronym title="Inteligencia Artificial">IA</acronym>,
de las ciencias <em>neuro-cognitivas</em>, y de la lingüística
computacional, entre otras disciplinas- en su ensayo <em><a href="http://web.media.mit.edu/~minsky/papers/Frames/frames.html" lang="en">A
Framework for Representing Knowledge</a></em> (1974).</p>
<p>En todo caso, y a modo ilustrativo de la dificultad que entraña
la práctica de la representación del conocimiento y la recuperación
de información -metadatos [<a href="http://www.dcc.uchile.cl/~cvasquez/meta/lenguajes.html">1</a>]
[<a href="http://www.noisebetweenstations.com/personal/essays/metadata_glossary/metadata_glossary.html" lang="en">2</a>]
para ser exactos- en el entorno de la
<em>web</em> semántica, nada
mejor que leer al respecto el artículo de Pedro Manuel Díaz
Ortuño
<em><a href="http://www.um.es/fccd/anales/ad06/ad0603.pdf">Problemática
y tendencias en la arquitectura de metadatos web</a></em> (<acronym title="Portable Document Format" lang="en">PDF</acronym>;
en
<em><a href="http://www.um.es/fccd/anales/">Anales de Documentación</a></em>,
nº 6, 2003, págs. 35-58).</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1113822867631890162005-04-18T13:13:00.000+02:002005-04-19T10:39:13.640+02:00Vida Artificial: bitácora<p>A través de los referidos (<em>referred</em>) de las estadísticas,
he recalado en la bitácora <a href="http://vidaartificial.com/">Vida
Artificial</a> ("Inteligencia Artificial, Software Libre y algo de todo
lo demás"). En ella, entre otras interesantes anotaciones y comentarios,
encontramos <a href="http://vidaartificial.com/?q=taxonomy/term/22">un
apartado</a> dedicado a "colgar" traducciones al castellano de artículos
publicados originalmente <a href="http://www.generation5.org/articles.asp" lang="en">en
Generation5</a> (portal dedicado a la Inteligencia Artificial y sus múltiples perspectivas), ocasión magnífica para acceder a su contenido
por parte de aquellos que no dominen excesivamente (o nada) el idioma inglés,
dada la buena calidad que en general suelen tener, y su orientación
eminentemente práctica, aunque bien es cierto que salvo <a href="http://www.generation5.org/articles.asp?Action=BySub&Subcategory=Beginner" lang="en">los
de carácter introductorio</a>, generalmente están pensados
para ser leídos por personas con conocimientos previos sobre el
tema tratado en particular. Sobre el lenguaje <a href="http://www.generation5.org/articles.asp?Action=List&Topic=Programming" lang="en">Prolog</a>
y el <a href="http://www.generation5.org/articles.asp?Action=List&Topic=Natural+Language+Processing" lang="en">Procesamiento
del Lenguaje Natural</a> (<acronym title="Natural Language Processing" lang="en">NLP</acronym>)
-debilidades particulares, entre otras, de quien suscribe-, hay unos cuantos en <a href="http://www.generation5.org/" lang="en">Generation5</a>,
muy recomendables para quien desee introducirse en el conocimiento de estas cuestiones.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1113737838073915682005-04-17T13:36:00.000+02:002005-04-17T17:16:29.176+02:00Glosario sobre Lógica de Primer Orden<p>Un recurso más que recomendable, <a href="http://www.earlham.edu/~peters/courses/logsys/glossary.htm" lang="en">Glossary
of First-Order Logic</a>:</p>
<blockquote>
"This glossary is limited to basic set theory, basic recursive
function theory, two branches of logic (truth-functional propositional
logic and first-order predicate logic) and their metatheory."</blockquote>
<p>El autor de este glosario terminológico, <a href="http://www.earlham.edu/~peters/hometoc.htm" lang="en">Peter
Suber</a>, imparte en el <a href="http://www.earlham.edu/~phil/" lang="en">Departamento
de Filosofía</a> del <a href="http://www.earlham.edu" lang="en">Earlham
College</a> (<acronym title="Estados Unidos de América">EUA</acronym>)
el curso <a href="http://www.earlham.edu/~peters/courses/logsys/lshome.htm">Logical
Systems</a> (sobre sistemas lógicos formales, lógica de primer
orden estándar, y Teoría de la Computación, principalmente),
desde cuya página se puede acceder, bajo el epígrafe "Hand-outs",
a un buen número de textos en relación con los temas tratados
en la asignatura. Los "hand outs" son materiales de trabajo (cuadernillos
con textos o ejercicios), generalmente de carácter esquemático
aunque no necesariamente, que se entregan a los participantes de un curso.</p>
<p>Al margen del mencionado curso, P. Suber desarrolla también una
notable actividad en torno al <a href="http://www.soros.org/openaccess/" lang="en">Movimiento
de Libre Acceso</a> (<em>Open Access Movement</em>, ver su <a href="http://www.earlham.edu/~peters/hometoc.htm" lang="en">página
personal</a>, y por destacar algo al respecto, por ejemplo su <a href="http://www.earlham.edu/~peters/fos/fosblog.html" lang="en">bitácora
monográfica</a> sobre el particular, así como la <a href="http://www.earlham.edu/~peters/fos/guide.htm" lang="en">Guide
to the Open Access Movement</a>, entre otros). También mantiene
un extenso directorio de enlaces sobre Filosofía en la <em>web</em>:
<a href="http://www.earlham.edu/~peters/philinks.htm" lang="en">Guide to
Philosophy on the Internet</a>.</p>
<p>Y ya que estamos metidos en lógica y filosofía, recomendar
la lectura del siguiente ensayo: <em><a href="http://www.crumpled.com/cp/personal/ccip.html" lang="en">Philosophical
Logic and Computational Constraints</a></em> (2002), de John L. Taylor,
autor así mismo de una interesante bitácora, <a href="http://crumpled.com/cp/personal/" lang="en">Johnny
Logic</a>. No es muy extenso y la lectura es bastante asequible, proporcionando
una visión general sobre el tema enunciado en el título. A través de su bitácora he podido de paso conocer
alguna otra, sobre temas relacionados con la Lógica y la Filosofía
de la Lógica, como por ejemplo <a href="http://www.ucalgary.ca/~rzach/logblog/" lang="en">LogBlog</a>,
mantenida por <a href="http://www.ucalgary.ca/~rzach/" lang="en">Richard
Zach</a> (profesor de Filosofía en la <a href="http://www.ucalgary.ca/" lang="en">Universidad
de Calgary</a>, Canadá). A su vez, la sección de enlaces
(<em>Blogroll</em>) de esta última nos ofrece la posibilidad de conocer
otras temáticamente relacionadas: <a href="http://thatlogicblog.blogspot.com/" lang="en">That
Logic Blog</a>, <a href="http://www.openefp.com/frontiers/" lang="en">Epistemic
Frontiers Project</a>, <a href="http://www.logicandlanguage.net/" lang="en">Logic
and Language</a>, etc.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1112232094161347152005-03-31T03:19:00.000+02:002005-04-01T03:10:44.500+02:00Lógica estoica<p>En la anterior anotación, citábamos el artículo <em><a href="http://www.maa.org/devlin/devlin_june.html" lang="en">Laws
of Thought</a></em>, publicado por Keith Devlin en su columna mensual <a href="http://www.maa.org/news/devangle.html" lang="en">Devlin's
Angle</a>. Bien, simplemente mencionar que en él, el autor realiza un repaso a las principales
características de la lógica estoica (surgida en el seno de
la <a href="http://www.luventicus.org/articulos/03U014/estoica.html">escuela
filosófica de los estoicos</a>, circa 300 a.C.), que supuso el punto
de arranque verdadero, junto con las aportaciones al respecto de la lógica
aristotélica (a la que se debe sin embargo la sistematización
de la disciplina), de los fundamentos contemporáneos de la <a href="http://www.educajob.com/xmoned/temarios_elaborados/filosofia/De%20la%20l%F3gica%20cl%E1sica%20a%20la%20l%F3gica%20simb%F3lica.htm">lógica</a>
matemática en general, y proposicional en particular:</p>
<blockquote>
"[Los Estoicos] Realizan una ampliación de la silogística
aristotélica mediante cinco formas de inferencia hipotéticas
o también disyuntivas, a partir de las cuales se tiene que poder
obtener cualquier conclusión válida. Mientras que la lógica
aristotélica era una lógica de términos, la lógica
estoica es una lógica proposicional."
<div class="cita">[Fuente: <a href="http://centros4.cnice.mecd.es/~norbacae/webcarrapiso/#TEMA6">6.3. Estoicismo</a>]</div>
</blockquote>
<p>La <a href="http://logicae.usal.es/searching.php?c_phase=1&id=181">lógica
proposicional</a> o <em>lógica de enunciados</em>, surge realmente
por tanto a partir de la aportaciones de los estoicos al campo de la lógica
formal (en contraposición esta última a la lógica
material o <em>teoría del conocimiento</em>), ya que cultivan una
lógica basada en <em>proposiciones</em> (enunciados lógicos
a los que se asocian valores de verdad o falsedad) y no en <em>conceptos</em>
(enunciados verdaderos <em>por si mismos</em>, por ejemplo: "Todos los hombres
son mortales, Sócrates es un hombre"; necesarios para inferir, a
partir de ellos, la demostración de otros: "por lo tanto, Sócrates
es mortal") como en el caso de la lógica aristotélica o <em>silogística</em>.</p>
<h3>Un breve repaso a las principales ramas de la lógica</h3>
<p>Tradicionalmente se ha considerado que el origen remoto de la lógica
formal es la lógica silogística o lógica clásica
desarrollada por el filósofo griego Aristóteles (384-322
a.C.), si bien ya hemos dicho anteriormente que hay que considerar
en el desarrollo de la lógica proposicional la decisiva aportación
de los lógicos estoicos.</p>
<p>La lógica silogística o <em>aristotélica</em>, en
tanto que <em>formalización</em> del sentido común, y en base
al lenguaje natural (y por tanto no exenta de ciertas dosis de ambigüedad
e imprecisión), trata de establecer la verdad o falsedad de determinado
argumento filosófico.</p>
<p>Abandonando el campo de la formalización de los argumentos lógicos
basados en el uso del lenguaje natural, la lógica simbólica
o matemática arranca con las aportaciones al respecto del filósofo
alemán G.W. Leibniz (1646-1717), inspiradas a su vez en el <em>Ars
Magna</em> de Ramón Llull (1232-1316) [<a href="http://www.aaai.org/Library/Magazine/Vol19/19-02/Papers/AIMag19-02-016.pdf" lang="en"><acronym title="Portable Document Format" lang="en">PDF</acronym></a>],
tratando de enfocar la lógica desde la perspectiva del álgebra,
si bien no es tomada realmente en consideración hasta el siglo XIX,
de la mano de George Boole (1815-1864), lógico y matemático
británico, y su lógica booleana en la que otorga un tratamiento
algebraico a las proposiciones de la lógica proposicional tradicional.
Los trabajos de Boole en el campo de la lógica matemática
permitirían a Claude Shannon [<a href="http://vistoyleido.blogspot.com/2005_01_01_vistoyleido_archive.html#110469079266948666">1</a>]
[<a href="http://programacionlogica.blogspot.com/2004_01_01_programacionlogica_archive.html#107395732842307963">2</a>]
[<a href="http://www.sciam.com/print_version.cfm?articleID=000745C4-9E66-1DA5-815A809EC5880000" lang="en">3</a>]
desarrollar en los años 30 del siglo XX el esquema básico
de "máquina lógica" digital, inicialmente sobre la base del
funcionamiento de relés que podían adoptar dos posiciones:
<em>abierto</em> o <em>cerrado</em> (lógica binaria asociada al funcionamiento
de un circuito eléctrico) [<a href="http://descartes.cnice.mecd.es/taller_de_matematicas/logica_digital/Logica%20Digital_0.htm">1</a>]
[<a href="http://www.sindominio.net/biblioweb/telematica/conf-ernesto/">2</a>].
La lógica simbólica representa los conceptos mediante símbolos,
siendo éstos interconectados a través de operadores.</p>
<p>Dentro de la lógica simbólica que se desarrolla a partir
del siglo XIX hay que distinguir a su vez dos grandes ramas: la <em>lógica
proposicional</em> por un lado, y el <em>cálculo de predicados</em> por otro.</p>
<p>La lógica proposicional [<a href="http://www.philosophypages.com/lg/e10a.htm" lang="en">1</a>]
[<a href="http://wmatem.eis.uva.es/~matpag/CONTENIDOS/Conjuntos/conjuntos.htm">2</a>]
se ocupa de establecer la verdad o falsedad de una o varias proposiciones,
entendiendo por éstas sentencias correctamente formadas que pueden
tomar un valor verdadero o falso, siendo conectadas las proposiciones mediante operadores.</p>
<p>Por su parte, el cálculo de predicados, también denominado
<em>lógica de predicados</em>, es una extensión de la lógica
proposicional que toma como base de cálculo el <em>predicado</em>,
función que devuelve un valor <em>verdadero</em> o <em>falso</em> dependiendo
de su argumento. Así por ejemplo, las bases de conocimiento de los
<a href="http://www.cica.es/docu/pubs/1994-06-suma.html">lenguajes de programación
lógica</a> como Prolog, están construidas básicamente
a base de predicados que pueden tomar en consideración uno o más
argumentos, o incluso otros predicados, para inferir resultados en los
procesos de interrogación. El cálculo de predicados permite
por tanto la separación entre un objeto y su posible atributo, y
establecer relaciones entre objetos y clases de objetos. Por otra parte,
la generalización de predicados se lleva a cabo mediante el uso de variables.</p>
<p>Un paso adelante en el desarrollo de métodos de <a href="http://claudiogutierrez.com/EeI.html">representación
e inferencia del conocimiento</a> basados en el uso de sistemas lógicos,
particularmente en el desarrollo de sistemas expertos, sobre el uso que
tradicionalmente permitían la lógica proposicional y la lógica
de predicados, es la toma en consideración de factores de incertidumbre,
usando a tal efecto cálculos probabilísticos tomados de la
Teoría de probabilidad clásica, en una primera fase de evolución
de este tipo de sistemas.</p>
<p>El uso de factores de incertidumbre se torna en imprescindible, en tanto
que muchas situaciones dentro de los fenómenos observables en el
mundo real admiten una gama de situaciones mucho más amplia que
la simple y tradicional dicotomía entre <em>verdadero</em> y <em>falso</em>.
A la unión entre lógica e incertidumbre, se la conoce habitualmente
como lógica borrosa o <em>fuzzy</em>, y es el punto de partida básico
y esencial para el desarrollo de sistemas y aplicaciones de <em>Inteligencia
Artificial</em> (IA). La aplicación de factores de incertidumbre
(probabilidad) en la toma de decisiones, en situaciones en las que se toma
en consideración información <em>hipotética</em>, por
parte de sistemas expertos, es por tanto la puerta de entrada básica
a la IA. Es en todo caso un punto de partida muy elemental, totalmente
superado hoy en día por otros enfoques a la hora de abordar la cuestión
de los sistemas informáticos <em>inteligentes</em>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1112185220296370732005-03-30T14:19:00.000+02:002005-04-21T19:43:41.800+02:00Selección de enlaces<p>Doy salida con esta anotación a una serie de enlaces a artículos,
comentarios, sitios y eventos diversos, que por una u otra razón
han merecido mi atención en las últimas semanas, sin que
por supuesto estos listados sean representativos de nada en particular...</p>
<p>Artículos, introducciones, anotaciones de "blogs":</p>
<ul class="conmargeninf">
<li>
<a href="http://www.touchgraph.com/TGGoogleBrowser.html" lang="en">TouchGraph
GoogleBrowser</a> ("[...] aplicación en Java que crea un mapa relacional
de una página <em>web</em> basada en los resultados de google [...]"
<a href="http://rivadulla.info/archivos/internet/touchgraph_googlebrowser.php">vía
rivadulla.info</a>).</li>
<li>
En <a href="http://www.maa.org/news/devangle.html" lang="en">Devlin's Angle</a>,
columna mensual de la <a href="http://www.maa.org/" lang="en">Mathematical
Association of America</a>: <a href="http://www.maa.org/devlin/devlin_3_01.html"><em>Claude
Shannon</em></a> (<a href="http://dimmat.fundacite.arg.gov.ve/devangsp2001-03.htm">traducción
al castellano</a>; marzo 2001); <a href="http://www.maa.org/devlin/devlin_june.html" lang="en"><em>Laws
of Thought</em></a> (junio 1996).</li>
<li>
<a href="http://www.xml.com/pub/a/2001/02/14/functional.html" lang="en">Functional
Programming and XML</a> (Bijan Parsia en <a href="http://www.xml.com/" lang="en">XML.com</a>;
también existe una versión del artículo <a href="http://www.erlang-fr.org/articles/bijan_parsia_001-fr.html" lang="fr">traducida
al francés</a>). Además de los mencionados en el artículo,
otro ejemplo de lenguaje basado en el paradigma de programación
funcional es <a href="http://www.informatik.uni-kiel.de/~mh/curry/" lang="en">Curry</a>
("A Truly Integrated Functional Logic Language"), aunque realmente se trata
de un lenguaje que combina los dos paradigmas más relevantes de
la programación declarativa, el ya mencionado <em>funcional</em>,
y el de la <em>programación lógica</em>, dando lugar a una
nueva <em>amalgama</em>, la <a href="http://www.informatik.uni-kiel.de/~mh/FLP/" lang="en">programación
<em>lógico-funcional</em></a>
(Functional Logic Programming).</li>
<li>
<a href="http://zootropo.f2o.org/traducciones/interfaces-usuario-usables/gui.html">Diseño
de Interfaces de Usuario Usables: Una Guía Rápida para Desarrolladores
de Software Libre y de Código Abierto</a> (texto traducido por Raúl
González Duque, en <a href="http://zootropo.f2o.org/">Zootropo</a>).</li>
<li>
<a href="http://blog.enrique.barbeito.org/archivos/2005/01/09/koders-codigo-fuente-indexado/">Koders,
código fuente indexado</a> ("Koders es [...] un motor de búsqueda
de código fuente, procedente de multitud de repositorios de software
públicos en Internet [...]. El código es indexado y clasificado
por lenguajes de programación y licencias con las que dicho código
está protegido."; en <a href="http://blog.enrique.barbeito.org/">Ebarbeito</a>).</li>
<li>
<a href="http://www.nosolousabilidad.com/articulos/descripcion_y_clasificacion.htm">Diseño
de Arquitecturas de Información: Descripción y Clasificación</a>
(<a href="http://www.nosolousabilidad.com/hassan/">Yusef Hassan Montero</a>,
<a href="http://anikautopia.blogia.com/">Ana
Núñez Peña</a>; en <a href="http://www.nosolousabilidad.com/">No
Solo Usabilidad</a>).</li>
<li>
<a href="http://www.microsiervos.com/archivo/ciencia/on-intelligence.html">On
Intelligence</a> (reseña del libro de Jeff Hawkins, en
<a href="http://www.microsiervos.com/">Microsiervos</a>).</li>
<li>
El Modelo del Espacio Vectorial. <a href="http://irsweb.blogspot.com/2005/03/el-modelo-del-espacio-vectorial-i.html">(I):
similitud entre vectores</a>; <a href="http://irsweb.blogspot.com/2005/03/el-modelo-del-espacio-vectorial-ii_22.html">(II):
distancia entre vectores</a>; <a href="http://irsweb.blogspot.com/2005/03/modelo-del-espacio-vectorial-iii-el_23.html">(III):
el esquema tf-idf</a>; <a href="http://irsweb.blogspot.com/2005/03/modelo-del-espacio-vectorial-iv-el.html">(IV):
El Alineamiento</a> (en <a href="http://irsweb.blogspot.com/">Recuperación
de Información en la Web</a>).</li>
<li>
<a href="http://kirai.bitacoras.com/index.php?p=504">¿Hacer cosas
útiles?</a> ("En un e-mail de mi hermano [...] leo lo siguiente:
'[...] voy a empezar a meterle caña a Php y Mysql a ver si aprendo
cosas útiles [...]' Dentro de esta simple frase se encuentra implícita
una de las grandes polémicas de Ing. de Telecomunicaciones e Informática
donde hay que dedicar varios años a estudiar matemáticas
y física pura y dura. [...] Según mucha gente todo esto no
sirve para nada, porque al salir al mundo laboral hay muchas cosas que
importan bastante más, pero..."; en <a href="http://kirai.bitacoras.com/">Kirai.net</a>). En esta interesante reflexión, Héctor García aborda
la presunta <em>utilidad</em> o <em>inutilidad</em> de las disciplinas académicas
que se imparten en ingenierías como Telecomunicaciones e Informática,
para concluir finalmente que todas ellas redundan positivamente en la formación
de la persona, ya que contribuyen a <em>modelar</em> un tipo de pensamiento (científico)
y de forma de razonar, imprescindibles para llevar a buen término
y con eficacia la práctica profesional en dichos campos de las ciencias
aplicadas.</li>
</ul>
<p>Páginas y sitios <em>web</em>:</p>
<ul class="conmargeninf">
<li>
<a href="http://web.genie.it/utenti/p/paoloomero/prolog.htm" lang="it">Interprete
di un linguaggio imperativo scritto in Prolog</a>.</li>
<li>
<a href="http://christophe.delord.free.fr/en/pylog/" lang="en">PyLog -
A first order logic library in Python</a> ("PyLog is a first order logic
library including a Prolog engine in Python. PyLog can also translate Prolog
into Python. [...]").</li>
<li>
<a href="http://www.webir.org/" lang="en">Web IR & IE</a> ("This site
is a collection of online resources for research in the field of information
retrieval and information extraction from the Web. [...]").</li>
<li>
<a href="http://coleweb.dc.fi.udc.es/cole/sites_cl.html" lang="en">Interesting
sites about Natural Language Processing</a> / <a href="http://coleweb.dc.fi.udc.es/cole/sites_ir.html" lang="en">[...]
about (Natural Language) Information Retrieval and Information Extraction</a>.</li>
<li>
<a href="http://www.divulgamat.net/">DIVULGAMAT</a> - Centro Virtual de
Divulgación de las Matemáticas.</li>
</ul>
<p>Conferencias, congresos:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.iiia.csic.es/~vtorra/mdai2005/" lang="en">MDAI (Modeling
Decisions for Artificial Intelligence) 2005</a> (Tsukuba, Japón,
25-27 julio 2005).</li>
<li>
<a href="http://www.laaic05.ruc.dk/" lang="en">LAAIC (Logical Aspects and
Applications of Integrity Constraints) 2005</a> (in conjunction with the
16th International Conference on Database and Expert Systems Applications,
<a href="http://www.dexa.org/" lang="en">DEXA
2005</a>; Copenhagen, Dinamarca, 26 agosto 2005).</li>
<li>
<a href="http://www.hds.utc.fr/WI05/" lang="en">2005 IEEE/WIC/ACM International
Conference on Web Intelligence and Intelligent Agent Technology</a> (Compiegne
University of Technology, Francia, 19-22 septiembre 2005).</li>
<li>
<a href="http://cedi2005.ugr.es/simposio_s7_ttia.shtml">TTIA'05: VI Jornadas
de Transferencia Tecnológica de Inteligencia Artificial</a> (Granada
14-16 septiembre 2005); estas jornadas se celebrarán en el marco
del <a href="http://cedi2005.ugr.es/">I Congreso Español de Informática
- CEDI 2005</a>; también en el marco de este congreso: <a href="http://cedi2005.ugr.es/simposio_s5_lfsc.shtml">LFSC'2005
- Simposio sobre Lógica Fuzzy y Soft Computing</a>.</li>
<li>
<a href="http://www.iiia.csic.es/iclp2005/" lang="en">International Conference
on Logic Programming (ICLP 2005)</a> - <a href="http://www.cs.nmsu.edu/~epontell/DC2005/" lang="en">Doctoral
Consortium</a> (Sitges, Barcelona, 2-5 octubre 2005).</li>
<li>
<a href="http://www-gsi.dec.usc.es/caepia05/">XI Conferencia de la Asociación
Española para la Inteligencia Artificial</a> (CAEPIA'05; Santiago
de Compostela, 23-25 noviembre 2005).</li>
<li>
<a href="http://www.cacs.louisiana.edu/~icdm05/" lang="en">ICDM'05</a>:
The Fifth IEEE International Conference on Data Mining (Nueva Orleans, <acronym title="Estados Unidos de América">EUA</acronym>,
27-30 noviembre 2005).</li>
</ul>
<p>Dos últimos apuntes:</p>
<p>En fechas recientes, han cambiado de ubicación y de sistema de
publicación (más flexible y potente), en <a href="http://deakialli.bitacoras.com/">Deakialli
DocuMental</a>, y por lo que se ve han aprovechado también para
llevar a cabo una ligera reorientación temática, tomando
especial consideración hacia los temas más directamente relacionados
con la recuperación de información en sus múltiples
facetas y enfoques. El cambio en todos los sentidos ha sido claramente
para mejor.</p>
<p>En segundo lugar, y ya que más arriba nos hacemos eco de la excelente
serie de artículos que sobre el <a href="http://www.ub.es/bid/04figue2.htm">modelo
de espacio vectorial de recuperación de información</a> están
apareciendo en la bitácora <a href="http://irsweb.blogspot.com/">Recuperación
de Información en la Web</a>, recomendar, a modo de introducción
sobre el tema, el breve resumen que sobre el mismo apareció hace
ya tiempo en el fenecido <em>weblog</em> <a href="http://rivendel.blogalia.com/">rivendel.org</a>,
bajo el título <em>Introducción a la Recuperación de
Información: Recuperar información con el Modelo de Espacio
Vectorial</em>. Se puede acceder al texto <a href="http://rivendel.blogalia.com/documentos/Teor%EDa/Recuperaci%F3nMEV.html">en
la ubicación original</a>, o bien <a href="http://web.archive.org/web/20050329155658/http://rivendel.blogalia.com/documentos/Teor%EDa/Recuperaci%F3nMEV.html">a
través de Wayback Machine</a>, herramienta de recuperación
del proyecto <a href="http://www.archive.org/" lang="en">Internet Archive</a>. (Actualización 01/04/2005: <a href="http://www.veaseademas.com/archivos/1999/01/yusef.html">Yusef
Hassan</a> también se hizo eco de esta serie de excelentes artículos
<a href="http://www.veaseademas.com/archivos/2005/03/recuperacian_de.html">en
Véase Además</a>).</p>
<p>Espero poder retomar en la próximas semanas un ritmo de publicación
más o menos regular. Gracias a todos por mantener el interés
sobre este sitio.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1107168085722004112005-01-31T11:40:00.000+01:002005-01-31T20:42:49.886+01:00Sistema experto aplicado a la extracción de información<p>Uno de los artículos incluidos en el último número
de <a href="http://www.bibliosperu.com/">Biblos</a> (Revista Electrónica
de Ciencias de la Información; nº 20, octubre - diciembre 2004),
lleva por título "<a href="http://www.documentalistas.com/web/biblios/articulos/20/2004_27.htm">Ensayo
de un sistema de extracción de información (técnica
de inteligencia artificial) en un centro de información especializado
en sanidad vegetal.</a>" (el artículo en sí está <a href="http://www.documentalistas.com/web/biblios/articulos/20/2004_27.pdf">en
formato <acronym title="Portable Document Format" lang="en">PDF</acronym></a>).
Escrito por Ingrid Paz García (Cuba), en él se detalla un
sistema experto aplicado a la extracción de información de
artículos de carácter científico, cuya temática
versa en este caso sobre la sanidad vegetal. La extracción de información
-una de las tareas más relevantes dentro de lo que se ha dado en
conocer como <em>minería de datos</em> [<a href="http://logicae.usal.es/open/29/mineria.pdf">1
</a> -<acronym title="Portable Document Format" lang="en">PDF</acronym>-]
[<a href="http://w3.mor.itesm.mx/~emorales/Cursos/KDD01/">2</a>] [<a href="http://www.cee.hw.ac.uk/~alison/ai3notes/all.html" lang="en">3</a>]
[<a href="http://elvex.ugr.es/etexts/spanish/kdd/KDD.html">4</a>] [<a href="http://www.bibliomining.com/" lang="en">5</a>]
o <em>data mining</em>-, añade complementariamente, a las técnicas
clásicas de la recuperación de información, otras
propias del ámbito de la inteligencia artificial, que permiten obtener
hechos (datos relevantes) a partir de los documentos recuperados.</p>
<p>Por cierto, y en relación con el <em>data mining</em>, hay muchos
expertos en la materia a los que no les gusta la traducción literal
"minería de datos"; prefieren expresiones más ajustadas al
sentido y uso original del término anglosajón tales como
"explotación de datos" o "descubrimiento de datos", por ejemplo.</p>
<p>El sistema experto descrito en el artículo, utilizado para la
extracción de información relevante de artículos de
contenido científico-técnico, recibe la denominación
SEISAV (Sistema de Extracción de Información en Sanidad Vegetal),
y está basado en el sistema CRYSTAL (Universidad de Massachussets),
orientado al tratamiento de textos exclusivamente en inglés, por
lo que ha sido convenientemente adaptado para trabajar con las particularidades
lingüísticas del idioma castellano, y dotado de mayores posibilidades
de uso. Induce (construye) automáticamente reglas de análisis
de los textos a partir de un entrenamiento previo (método de "Entrenamiento
automático"), si bien estas reglas pueden ser construidas manualmente
por un experto familiarizado en este tipo de sistemas, y en el dominio
específico de aplicación (método de "Ingeniería por Conocimiento").</p>
<p>El sistema CRYSTAL es un <em><a href="http://www.faqs.org/faqs/ai-faq/expert/" lang="en">shell</a></em>
(entorno de desarrollo) diseñado originalmente para trabajar bajo
MS-DOS, comercializado en Europa por <a href="http://www.ie.com/" lang="en">Intelligent
Environments</a>. Sin embargo, nuevos entornos (<a href="http://www.ie.com/pages.aspx?sid=13&id=174" lang="en"><acronym title="Application Manager" lang="en">AM</acronym>
para Windows</a>) relegaron el <a href="http://www.ie.com/pages.aspx?sid=13&id=172&type=No" lang="en">desarrollo
de CRYSTAL</a> como producto comercial en los años 90 del siglo pasado.</p>
<p>El funcionamiento del sistema, y varios ejemplos de uso, están
perfectamente explicados en el artículo, de forma bastante amena,
con un nivel de complejidad muy asequible incluso para las personas sin
conocimientos previos en relación con los sistemas expertos [<a href="http://www.redcientifica.com/doc/doc199908210001.html">1</a>]
[<a href="http://www.ucm.es/info/eurotheo/diccionario/S/sistemas_expertos.htm">2</a>]
[<a href="http://luisguillermo.com/castellano/default.htm#AI">3</a>] [<a href="http://www.esi2.us.es/~dco/sistemas.htm">4</a>]
[<a href="http://personales.unican.es/gutierjm/BookCGH.html" lang="en">5</a>] [<a href="http://www.bcsnsg.org.uk/itin08/darling.htm" lang="en">6</a>] [<a href="http://ingenieroseninformatica.org/recursos/tutoriales/sist_exp/">7</a>],
que hace que sea una lectura más que recomendable para toda persona
interesada en la puesta en marcha de estos sistemas aplicados al tratamiento
documental y la gestión de la información de carácter
significativo (en contraposición a la recuperación y tratamiento
de información en "bruto").</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1104758126466610462005-01-03T14:14:00.000+01:002005-01-07T12:02:35.946+01:00Reseñas de libros sobre lógica y demostración en MAA Online<p>En <a href="http://www.maa.org/reviews/tindex14.html" lang="en">Proofs
and Logic Solving Book Reviews</a>, se listan todas las reseñas
publicadas en la <em>web</em> de la Mathematical Association of America (<a href="http://www.maa.org/" lang="en">MAA
Online</a>), dentro de la sección <a href="http://www.maa.org/reviews/reviews.html" lang="en">Read
This! - The MAA Online book review column</a>, sobre monografías
cuya temática principal gira en torno a la lógica y la demostración,
así como disciplinas conexas de la matemática, como por ejemplo
la <a href="http://www.cis.syr.edu/~sanchis/setory.html" lang="en">teoría
de conjuntos</a>. Para localizar reseñas sobre otras temáticas del
ámbito de estudio de las matemáticas, acudir al <a href="http://www.maa.org/reviews/topics-index.html" lang="en">índice
por temas</a>.</p>
<p>También son destacables en la <em>web</em> de <a href="http://www.maa.org/" lang="en">MAA
Online</a>, las breves <em>columnas</em> mensuales (en el menú desplegable
de la izquierda del portal de entrada, están recogidas bajo el epígrafe
"Publications, Columns"), escritas por diversos autores sobre toda clase
de temas relacionados con el amplio universo de las matemáticas, como
por ejemplo la de Keith Devlin, la más veterana de todas, publicada
bajo el epígrafe <a href="http://www.maa.org/news/devangle.html" lang="en">Devlin's
Angle</a>; este autor, y sobre el tema de la lógica y la deducción,
tiene alguna cosa interesante, como son los breves comentarios <em><a href="http://www.maa.org/devlin/devlin_01_04.html" lang="en">The
mathematics of human thought</a></em>, <em><a href="http://www.maa.org/devlin/devlin_june.html" lang="en">Laws
of Thought</a></em> y <em><a href="http://www.maa.org/devlin/devlinangle_april.html" lang="en">Are
Mathematicians Turning Soft?</a></em>, entre otros.</p>
<p><strong>Actualización</strong> (07/01/2005): en el artículo de
este mes (enero 2005), <em><a href="http://www.maa.org/devlin/devlin_01_05.html" lang="en">Last
doubts removed about the proof of the Four Color Theorem</a></em>, K. Devlin
da cuenta de nuevas aportaciones en la demostración, mediante medios
informáticos, del Problema de los Cuatro Colores [<a href="http://es.wikipedia.org/wiki/Colorear_un_mapa_con_4_colores">1</a>]
[<a href="http://redescolar.ilce.edu.mx/redescolar/act_permanentes/mate/mate1o.htm">2</a>]
[<a href="http://centros5.pntic.mec.es/ies.ortega.y.rubio/Mathis/Colores/4colores.htm">3</a>],
un clásico en el campo de la lógica deductiva, la <a href="http://minerva.filosoficas.unam.mx/~morado/LogicaHoy/morado.html">demostración
matemática</a>, la topología, y la combinatoria, y hace un
repaso a las diversas conjeturas que este problema a suscitado a lo largo
del tiempo. Este problema se puede definir, brevemente, mediante el siguiente
enunciado:</p>
<blockquote>
"En un plano o en una esfera no se necesitan más de
cuatro colores para colorear un mapa de manera que dos regiones vecinas,
es decir, que compartan una frontera y no únicamente un punto, no
queden coloreadas del mismo color"
<div class="cita">[<a href="http://redescolar.ilce.edu.mx/redescolar/act_permanentes/mate/mate1o.htm">Fuente</a>]</div>
</blockquote>
<p><a href="http://www-formal.stanford.edu/jmc/" lang="en">John McCarthy</a>,
uno de los pioneros de la Inteligencia Artificial, analizó, en el
artículo <em><a href="http://www-formal.stanford.edu/jmc/coloring.html" lang="en">Coloring
Maps and the Kowalski Doctrine</a></em> (1982), un programa escrito en Prolog,
y sus algoritmos subyacentes, que resolvía este problema aplicando
la metodología de la programación lógica a demostraciones
matemáticas anteriores, alcanzadas tras el enunciado del problema
en la segunda mitad del siglo XIX.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1103591781231586232004-12-21T02:14:00.000+01:002005-01-04T02:36:27.083+01:00Artículos, comentarios, y otros enlaces diversos<p>En estos últimos meses de ausencia de producción escrita por estos lares, he ido tomando nota de una serie
de artículos, comentarios en bitácoras, y otros enlaces de
diversa naturaleza, que han merecido mi interés por una u otra razón,
siempre en función de la temática sobre la que versa o pretende
versar este sitio. No se trata de una lista exhaustiva (de todo lo que
he leído y me ha interesado), ni ordenada con excesivo criterio o rigor...</p>
<p>Artículos, introducciones, anotaciones de "blogs":</p>
<ul class="conmargeninf">
<li>
A taste of Poplog <a href="http://zephyrfalcon.org/weblog2/arch_e10_00560.html#e562" lang="en">(1)</a>
y <a href="http://zephyrfalcon.org/weblog2/arch_e10_00560.html#e563" lang="en">(2)</a>
(sobre el <a href="http://www.poplog.org/" lang="en">entorno de desarrollo
Poplog</a>; en <a href="http://zephyrfalcon.org/weblog2/" lang="en">Efectos
Especiales</a>).</li>
<li>
<a href="http://lambda-the-ultimate.org/node/view/240" lang="en">Pythologic
- Prolog syntax in Python</a> (en <a href="http://lambda-the-ultimate.org/" lang="en">Lambda
the Ultimate</a>).</li>
<li>
<a href="http://lambda-the-ultimate.org/node/view/247" lang="en">Description
Logics in Literate Haskell</a> / <a href="http://lambda-the-ultimate.org/node/view/246" lang="en">SAT
3 Proof with E Prover via OWL</a> (en <a href="http://lambda-the-ultimate.org/" lang="en">Lambda
the Ultimate</a>).</li>
<li>
<a href="http://lambda-the-ultimate.org/node/view/257" lang="en">NewLisp:
A better Lisp/Scheme Fusion</a> ("<a href="http://www.newlisp.org/" lang="en">newLISP</a>
is a general purpose scripting language for developing Web applications
and programs in general and in the domain of Artificial Intelligence (AI)
and statistics."; en <a href="http://lambda-the-ultimate.org/" lang="en">Lambda
the Ultimate</a>).</li>
<li>
<a href="http://www.microsoft.com/typography/ctfonts/WordRecognition.aspx" lang="en">The
Science of Word Recognition</a> (Kevin Larson - Advanced Reading Technology,
Microsoft Corporation).</li>
<li>
<a href="http://eprints.rclis.org/archive/00001497/" lang="en">Intelligent
library systems: artificial intelligence technology and library automation
systems</a> (Bailey, Jr., Charles W., 1991).</li>
<li>
<a href="http://www.alanturing.net/turing_archive/pages/Reference%20Articles/What%20is%20AI.html" lang="en">What
is Artificial Intelligence?</a> (por Jack Copeland en <a href="http://www.alanturing.net/turing_archive/pages/Reference%20Articles/referencearticlesindex.html" lang="en">Catalogue
of Reference Articles</a> - <a href="http://www.alanturing.net/" lang="en">AlanTuring.net</a>).</li>
<li>
<a href="http://www.maths.tcd.ie/pub/HistMath/People/Boole/CalcLogic/CalcLogic.html" lang="en">The
Calculus of Logic</a> (Por George Boole, 1815-1864, lógico y matemático británico,
creador del primer sistema formal de lógica matemática o
<em>simbólica</em>, denominado <em>álgebra de Boole</em> o <em>álgebra
lógica</em>, cuyo ámbito es el estudio de las funciones lógicas).</li>
<li>
<a href="http://www.mycgiserver.com/~gpiancastelli/blog/archives/000094.html" lang="en">Does
Fit fit your testing needs?</a> ("I needed to perform some acceptance testing
on a Prolog parser, and found some sample Prolog text from the <a href="ftp://ftp.elis.rug.ac.be/pub/prolog/prolog.parser.Z">BinProlog</a>
engine that I could use for the task at hand. To automate the process,
I decided to use <a href="http://fit.c2.org/" lang="en">Fit</a> because
[...]"; en <a href="http://www.mycgiserver.com/~gpiancastelli/blog/" lang="en">Through
the blogging-glass</a>).</li>
<li>
<a href="http://www.generation5.org/content/2004/nlpUnix.asp" lang="en">Natural
Language Processing Using Linux</a> ("This article will discuss how to
perform simple textual analysis such as word counts, bigrams and trigrams,
using standard Linux tools. [...]"; en <a href="http://www.generation5.org/" lang="en">Generation5</a>).</li>
<li>
<a href="http://www.generation5.org/content/1999/selforganize.asp" lang="en">Self-Organizing
Nets</a> ("After a detailed look at supervised networks [...] we should
look at a good example of unsupervised networks. The Kohonen network is
probably the best example, because it is quite simple yet introduces the
concepts of self-organization and unsupervised training easily. [...]";
en <a href="http://www.generation5.org/" lang="en">Generation5</a>).</li>
<li>
<a href="http://www.di.uniovi.es/~cernuda/noprog.html">Cómo NO realizar
una práctica de programación</a> (vía <a href="http://cek.bitacoras.com/archivos/2004/10/20/como_no_hacer_una_practica_de_programacion/">Ceklog</a>).</li>
<li>
<a href="http://homepages.inf.ed.ac.uk/wadler/realworld/" lang="en">Functional
Programming in the Real World</a> ("[...] a list of functional programs
applied to real-world tasks.").</li>
<li>
<a href="http://www.ontopia.net/topicmaps/materials/tm-vs-thesauri.html" lang="en">Metadata?
Thesauri? Taxonomies? Topic Maps!</a> (conocido a través del "blog"
<a href="http://blogia.com/anikautopia/index.php?idarticulo=200411131">K-Utopía</a>).</li>
<li>
<a href="http://www.mycgiserver.com/~gpiancastelli/blog/archives/000096.html" lang="en">A
<acronym title="Constraint Logic Programming" lang="en">CLP</acronym> + <acronym title="Constraint Handling Rules" lang="en">CHR</acronym> bibliography</a> ("For future reference, here is a list of <acronym title="Constraint Logic Programming" lang="en">CLP</acronym>
and <acronym title="Constraint Handling Rules" lang="en">CHR</acronym> related works I?ve been reading in the last weeks. In memoriam
of a project I?m not going to pursue anymore."; en <a href="http://www.mycgiserver.com/~gpiancastelli/blog/" lang="en">Through
the blogging-glass</a>). Sobre Programación Lógica con Restricciones (CLP), ver por ejemplo la introducción <em><a href="http://www.cs.auckland.ac.nz/~j-hamer/07.363/byte.html" lang="en">Constraint Logic Programming</a></em> (<a href="http://www.byte.com/art/9502/sec13/art3.htm" lang="en">BYTE magazine</a>, <a href="http://www.byte.com/art/9502/9502.htm" lang="en">febrero 1995</a>), o bien <a href="http://www.cs.ualberta.ca/~mmueller/Courses/325Fall2003/Mynotes/Log/clp-intro.html" lang="en">esta otra</a>, en la que primero se hace un repaso general a la <em>programación con restricciones</em>. La <a href="http://www.swi-prolog.org/dl-beta.html" lang="en">última versión</a> en desarrollo de <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>, soporta clp(R): "Beta version of Constraint Logic Programming over Reals library". Por su parte, CHR son las siglas de <em><a href="http://www.informatik.uni-ulm.de/pm/fileadmin/pm/home/fruehwirth/chr-intro.html" lang="en">Constraint
Handling Rules</a></em>: "CHR was designed as a language for defining constraint
solvers, but at the same time it is one of the most powerful multiset rewriting
languages. [...] CHR are a high-level language for concurrent logical systems.
CHR make it easy to define constraint reasoning: simplification and propagation
as well as incremental solving of constraints. [...]" [<a href="http://www.informatik.uni-ulm.de/pm/fileadmin/pm/home/fruehwirth/chr-rightframe.html" lang="en">fuente</a>].</li>
<li>
<a href="http://lambda-the-ultimate.org/node/view/386" lang="en"><acronym title="Resource Description Framework" lang="en">RDF</acronym> and
Databases</a> (en <a href="http://lambda-the-ultimate.org/" lang="en">Lambda
the Ultimate</a>).</li>
<li>
<a href="http://www.fing.edu.uy/inco/grupos/coal/investigacion/publicaciones/pm02.pdf">Orientación
a objetos en Prolog</a> (formato <acronym title="Portable Document Format" lang="en">PDF</acronym>; "La posibilidad de incorporar elementos
del paradigma de orientación a objetos en la programación
lógica parece, a priori, interesante, dado que permitiría
sumar lo mejor de ambos mundos. Los lenguajes de programación lógica
han tenido siempre como ventaja el permitir enfocar la atención
del programador en el problema a resolver y en el diseño de la solución,
más que en la mecánica de la misma. La incorporación
de orientación a objetos ayudaría en la reutilización
del código, ocultamiento de información y además permitiría
realizar un diseño más claro de las soluciones. En este trabajo
se estudia una aproximación al tema de la orientación a objetos
en Prolog, la realizada por el módulo <a href="http://www.sics.se/sicstus/docs/latest/html/sicstus/Obj-Intro.html" lang="en">Prolog
Objects</a> de <a href="http://www.sics.se/sicstus.html" lang="en">SICStus
Prolog</a>. Se muestran las ideas principales del módulo, su sintaxis
y funcionamiento, para presentar finalmente algunos ejemplos de diseño
utilizando el paradigma."; D. Perovich y G. Moncecchi, 2002).</li>
<li>Otro ejemplo de implementación de Prolog que soporta programación orientada
a objetos es <a href="http://clip.dia.fi.upm.es/Software/Ciao/" lang="en">Ciao
Prolog</a>: "O'Ciao is a set of libraries which allows object-oriented
programming in Ciao Prolog. [...]" (fuente: <a href="http://clip.dia.fi.upm.es/Software/Ciao/ciao_html/ciao_toc.html" lang="en">Reference
Manual</a> - <a href="http://clip.dia.fi.upm.es/Software/Ciao/ciao_html/ciao_114.html" lang="en">Object
oriented programming</a>).</li>
<li>
<a href="http://www.danielclemente.com/logica/dn.html">Introducción
a la deducción natural</a> (D. Clemente Laboreo; la deducción
natural consiste en un conjunto de procedimientos formales -lenguaje de
la lógica formal- cuyo fin es la demostración de la corrección
de determinado razonamiento, es decir, la validad de dicho razonamiento
-no su invalidez, sin embargo-; este documento también está
disponible <a href="http://www.danielclemente.com/logica/dn.pdf">en formato
<acronym title="Portable Document Format" lang="en">PDF</acronym></a>).</li>
</ul>
<p>Páginas y sitios <em>web</em>:</p>
<ul class="conmargeninf">
<li>
<a href="http://techbooksforfree.com/" lang="en">TechBooksForFree.com</a>
(Free Programming and Computer Science Books; <a href="http://cek.bitacoras.com/archivos/2004/09/14/libros_electronicos_gratis/">vía
Ceklog</a>).</li>
<li>
<a href="http://www.sidar.org/wshoy/">Web Semántica Hoy</a>.</li>
<li>
<a href="http://www.premise.org/" lang="en">Premise.org</a> (selección
de enlaces sobre el campo de la Inteligencia Artificial).</li>
<li>
<a href="http://www.cnice.mecd.es/eos/MaterialesEducativos/mem2003/logica/">Aprende
Lógica</a> (esta página mereció uno de los segundos
premios en el concurso de la <a href="http://www.cnice.mecd.es/eos/MaterialesEducativos/mem2003/">edición
2003</a> convocado por el Ministerio de Educación y Ciencia a través
del Centro Nacional de Investigación y Comunicación Educativa
-<a href="http://www.cnice.mecd.es/">CNICE</a>-).</li>
<li>
<a href="http://irsweb.blogspot.com/">Recuperación de Información
en la Web</a> ("Bitácora dedicada a la recuperación de la
información en la Web, centrada no únicamente en los aspectos
tecnológicos de la misma, sino también en noticias de marcada
incidencia social."). Artículos y comentarios muy buenos, escritos por <a href="http://www.um.es/gtiweb/fjmm/">F.
J. Martínez Méndez</a> -profesor de la <a href="http://www.um.es/f-documentacion/">Facultad
de Comunicación y Documentación</a> de la Universidad de
Murcia- con mucho rigor y al tiempo amenidad sobre toda clase de temas
relacionados con las técnicas de recuperación de información,
con una particular atención en la incidencia de las mismas en los
entornos <em>web</em>. Ver a modo de ejemplo uno de los últimos comentarios: <em><a href="http://irsweb.blogspot.com/2004/12/es-la-realimentacin-por-relevancia-una.html">¿Es
la "realimentación por relevancia" una técnica de recuperación
de información?</a></em>.</li>
<li>
<a href="http://www.um.es/gtiweb/adrico/">Glosario de Recuperación
de Información Web</a> (por Adriana Colino Tomé).</li>
<li>
<a href="http://ioctl.org/logic/" lang="en">Prolog interpreter in Javascript</a>.</li>
<li>
<a href="http://www.documentaciondigital.org/master/laboratorio.htm">Laboratorio
Digital del Máster Online en Documentación Digital</a> (Universitat
Pompeu Fabra; Incluye, además de varias utilidades desarrolladas
con las <acronym title="Aplication Programming Interface" lang="en">API</acronym> de Google, las herramientas: DigiDocMap -editor de mapas conceptuales-,
DigiDocMenu -editor de menús desplegables-, y DigiDocIndex -indexador
y generador de buscadores locales-).</li>
<li>
<a href="http://www.dei.isep.ipp.pt/~jcoelho/x-prolog/" lang="en">X-Prolog:
a type-based system for <acronym title="Extensible Markup Language" lang="en">XML</acronym> processing in Prolog</a> (<a href="http://www.dei.isep.ipp.pt/~jcoelho/" lang="en">J.
Coelho</a>, <a href="http://www.ncc.up.pt/~amf/" lang="en">M. Florido</a>.
También de estos dos autores, la ponencia <em><a href="http://www.dei.isep.ipp.pt/~jcoelho/x-prolog/padl03.pdf" lang="en">Type-based
<acronym title="Extensible Markup Language" lang="en">XML</acronym> Processing in Logic Programming</a></em> -en <acronym title="Portable Document Format" lang="en">PDF</acronym>- ofrece una exposición
del funcionamiento y aplicación de X-Prolog en el procesamiento
de código <acronym title="Extensible Markup Language" lang="en">XML</acronym>. Para su funcionamiento necesita tener instalado <a href="http://www.swi-prolog.org/" lang="en">SWI-Prolog</a>
y cargada la <a href="http://www.swi-prolog.org/packages/sgml2pl.html" lang="en">librería
o módulo SGML</a>. Con propósito general, comentar que en
el capítulo 5 -<em><a href="http://hcs.science.uva.nl/projects/SWI-Prolog/Manual/modules.html" lang="en">Using
Modules</a></em>- del <a href="http://hcs.science.uva.nl/projects/SWI-Prolog/Manual/" lang="en">manual
de referencia</a> de SWI-Prolog, se explica cómo usar módulos
externos. En el caso de la librería SGML, los predicados necesarios
para procesar <acronym title="Extensible Markup Language" lang="en">XML</acronym> se compilan al cargar el archivo "sgml.pl", localizado
en la carpeta "library" del directorio de instalación de SWI-Prolog
-generalmente y por defecto "Archivos de programa\pl\"-).</li>
<li>
<a href="http://www.disenorama.com/">Diseñorama</a> ("[...] es un
sitio de tutoriales, artículos y recursos para diseñadores
web sobre estándares, accesibilidad, usabilidad y programación.").</li>
</ul>
<p>Conferencias, congresos:</p>
<ul class="conmargeninf">
<li>
<a href="http://www.swi.psy.uva.nl/AIED2005/" lang="en">AIED 2005</a> -
The 12th International Conference on Artificial Intelligence in Education
(18-22 de julio 2005, Amsterdam).</li>
<li>
<a href="http://www-gsi.dec.usc.es/ecir05/" lang="en">ECIR'05</a> - 27th
European Conference on Information Retrieval (21-23 de marzo 2005, Santiago
de Compostela).</li>
<li>
<a href="http://bd.ub.es/isko2005/">7º Congreso ISKO-España</a>
(6-8 de julio 2005, Barcelona).</li>
<li>
<a href="http://www.unm.edu/~herme/padl05/" lang="en">PADL 05</a> - Seventh
International Symposium on Practical Aspects of Declarative Languages (10-11
de enero 2005, Long Beach, California).</li>
</ul>
<p>Comentar por último que mi intención es ir publicando de aquí en adelante, y con
una periodicidad más o menos mensual, sucesivas listas de los artículos,
reseñas y otros textos y enlaces, que me parezcan más relevantes,
relacionados directa o indirectamente con los asuntos tratados por lo general
en este <em>blog</em>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com1tag:blogger.com,1999:blog-5454882.post-1103250682171458372004-12-17T03:30:00.000+01:002004-12-18T17:35:01.676+01:00Una introducción general al lenguaje Prolog<p>A quienes busquen una introducción básica (muy básica
eso sí) al lenguaje Prolog, les recomiendo la lectura del artículo o "white paper" de <a href="http://www.gerardorossel.org/">Gerardo Rossel</a> "Programación lógica":</p>
<blockquote>
"Un recorrido por la programación lógica y uno
de sus lenguajes más representativos: Prolog, clásico de
la inteligencia artificial, que se aplica de múltiples formas en
el desarrollo de software comercial"
<div class="cita">[Fuente: entradilla del artículo]</div>
</blockquote>
<p>En la introducción del artículo se define de forma muy clara
y concisa la famosa "ecuación" de Kowalski (a la que quizás recordarán
dediqué un comentario bastante extenso -no tan claro y conciso-, hace ya tiempo, en la
anotación "<a href="http://programacionlogica.blogspot.com/2004_03_01_programacionlogica_archive.html#108064695478923719">A
propósito de la fórmula de Kowalski</a>"). Leemos lo siguiente en dicha introducción:</p>
<blockquote>
"[...] La ecuación de Robert Kowalski [...] establece
la idea esencial de la programación lógica: <em>algoritmos
= lógica + control</em>. Es decir, un algoritmo se construye especificando
conocimiento en un lenguaje formal (lógica de primer orden), y el
problema se resuelve mediante un mecanismo de inferencia (control) que
actúa sobre aquél."
</blockquote>
<p>Publicado en el <a href="http://www.tectimes.com/magazines/code/code007/">número
7</a> de la revista <a href="http://www.tectimes.com/magazines/default.asp?marca=.CODE">.code</a>,
el texto completo del artículo se puede localizar, <a href="http://www.amzi.com/articles/code07_whitepaper.pdf">en
formato <acronym title="Portable Document Format" lang="en">PDF</acronym></a>,
a través de la página de <a href="http://www.amzi.com/" lang="en">Amzi!</a>,
empresa dedicada al desarrollo de aplicaciones y sistemas expertos sobre
la base de los fundamentos de la programación lógica en sinergia o conjunción con otras tecnologías y lenguajes:</p>
<blockquote>
"Amzi! specializes in products and services for developing
and deploying integrated application components that apply logical knowledge,
such as pricing rules, configuration logic, insurance regulations, diagnostic
and advisory knowledge, grammar rules, message translation rules, and semantic
relationships. [...]"
<div class="cita">[Fuente: <a href="http://www.amzi.com/products/amzi_overview.htm" lang="en">Amzi!
Technology, Products and Services Overview</a>]</div>
</blockquote>
<p>Especialmente reputado es su entorno de desarrollo <a href="http://www.amzi.com/products/prolog_products.htm" lang="en">Amzi!
Prolog + Logic Server</a> ("Embeddable, extendable Prolog for programmers
to build high-performance rule-based systems."). Por otra parte, en el
apartado "<a href="http://www.amzi.com/articles/" lang="en">Articles &
Links</a>" encontramos, en inglés, un buen número de introducciones,
tutoriales, artículos, y otras referencias, sobre el lenguaje Prolog
y sus múltiples aspectos prácticos, con una especial atención
a su aplicación en el desarrollo de sistemas expertos.</p>
<p>Para finalizar, comentar que, increíble e inmerecidamente (y
no es falsa modestia), se referencia a este espacio de publicación
con formato de bitácora desde el que escribo estas líneas,
en el apartado "Enlaces relacionados", que se puede encontrar al final del
artículo de Gerardo Rossel. La publicación de esta breve
reseña no tiene nada que ver con dicha circunstancia, de hecho reparé
en ella una vez que me puse a escribir y releí con mayor atención
el texto del artículo...</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1088425667018063552004-06-28T14:27:00.000+02:002004-06-30T01:41:52.266+02:00Inicios de la programación informática: ASCII y Cobol<p>El pasado martes 22/06/2004, falleció en EE.UU. <a href="http://www.bobbemer.com/" lang="en">Robert
W. Bemer</a>, pionero de la programación de ordenadores. Entre sus
méritos profesionales se cuenta el haber contribuído decisivamente
al establecimiento del estándar <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>
[<a href="http://www.ascii.cl/" lang="en">1</a>] [<a href="http://en.wikipedia.org/wiki/Ascii" lang="en">2</a>]
de representación e intercambio de información, y al desarrollo
del lenguaje de programación <acronym title="COmmon Business Oriented Language" lang="en">COBOL</acronym>.
Con motivo de su fallecimiento, el diario <a href="http://www.elpais.es">El
País</a> publicó en la edición de ayer 27/06/2004
una breve nota biográfica, traducción del texto original editado <a href="http://www.nytimes.com/2004/06/25/obituaries/25bemerobit.html" lang="en">en
The New York Times</a>, de la que extractamos los párrafos que hacen
referencia al trabajo de Bemer en el campo de la programación
informática:</p>
<blockquote>
<h3>Robert W. Bemer, pionero de la programación de ordenadores</h3>
<p><a href="http://www.bobbemer.com/" lang="en">Robert W. Bemer</a>, uno de
los primeros programadores de ordenadores, que contribuyó a idear <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>,
un sistema que sigue estando en uso para representar letras y números
en código [...] empezó a trabajar con ordenadores cuando
hacía trabajos de ingeniería en aviones militares para la
Rand Corporation de California, en 1949. "Allí conocí los
primeros ordenadores IBM y me enamoré de su técnica. Supe
que estaba hecho para el mundo de los ordenadores. Este negocio estaba
en su primera infancia, y programar era un trabajo que se hacía
a la medida; normalmente implicaba preparar máquinas para que hicieran
cálculos de uno en uno. Hasta 1958 no se publicó la primera
mención al término <em>software</em> como término informático.
El <em>software</em> no era una actividad independiente, sino simplemente
algo por lo que había que pagar para conseguir que los ordenadores,
que tenían entonces el tamaño de una habitación, pudieran
hacer su trabajo", escribió en una serie de recuerdos en <a href="http://www.bobbemer.com/" lang="en">su
página <em>web</em></a>.</p>
<p>Brillante, locuaz e irreverente, Bemer pareció encajar exactamente
en el papel durante los primeros años alocados de la programación.
Trabajó para fabricantes de aviones en California, hasta 1955, que
se incorporó al departamento de investigación de programación
de IBM en Nueva York. No había preparación oficial para programadores,
y durante un tiempo Bemer estuvo encargado de reclutarlos.</p>
<p>Bemer desempeñó un importante papel contribuyendo a desarrollar
un sistema estándar para traducir letras y números a un código
digital que podía ser procesado por un ordenador, conocido como
Código Estándar Americano para Intercambio de Información,
o <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>
(siglas en inglés). Antes de <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>,
los fabricantes de ordenadores tenían sus propios sistemas para
codificar letras y números, lo que hacía difícil o
imposible el intercambio de datos entre máquinas de distintos fabricantes
de ordenadores. A finales de los años cincuenta y principios de
los sesenta, Bemer fue uno de los principales defensores e impulsores del
estándar, bajo la orientación del <a href="http://www.ansi.org/" lang="en">Instituto
Americano de Estándares Nacionales</a> (después fue adoptado
por la <a href="http://www.iso.org" lang="en">Organización Internacional
de Estándares</a>). <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>
se puso en práctica en 1963, se fue expandiendo y modificando a
lo largo de los años [...]. Bemer apoyó decididamente el <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>,
a pesar de que la dirección de IBM defendía su propio estándar
de codificación. En 1962, Bemer dejó IBM para incorporarse
a la división Sperry Sand's Univac. A su manera, el estándar <acronym title="American Standard Code for Information Interchange" lang="en">ASCII</acronym>
fue un precursor de los estándares para intercambio y lectura de
datos que permiten la comunicación a través de Internet y
la <em>web</em> mundial.</p>
<p>A finales de los años cincuenta, Bemer desempeñó
un papel en otro estándar informático importante, el lenguaje
de programación Cobol. El Departamento de Defensa quería
un lenguaje común para datos de contabilidad y administración,
y el resultado, a finales de 1959, fue Cobol, siglas inglesas de Lenguaje
Común Orientado a la Administración. [...]</p>
</blockquote>
<p>Como su propio nombre indica, <acronym title="COmmon Business Oriented Language" lang="en">COBOL</acronym>
(<em>COmmon Business Oriented Language</em>) fue un lenguaje de programación
<a href="http://www.cnn.com/TECH/computing/9906/09/1959.idg/" lang="en">creado
en 1959-1960</a>, en el seno del comité <a href="http://www.ee.und.ac.za/coursemain/DNE4DP2/sqlnotes/CODASYL.htm" lang="en">CODASYL</a>
(<em>Conference on Data Systems Languages</em>) -auspiciado a partir de 1957
por el Departamento de Defensa de los EE.UU- para ser aplicado en tareas
de gestión administrativa y contable.</p>
<p>De gran facilidad de lectura,
merced a una sintaxis muy cercana a la expresión del lenguaje natural
en idioma inglés, se le achaca sin embargo a <acronym title="COmmon Business Oriented Language" lang="en">COBOL</acronym> ser un lenguaje excesivamente
rígido en su formato de escritura, de sentencias muy largas, y no
adecuado para las técnicas de <a href="http://es.wikipedia.org/wiki/Programaci%F3n_estructurada">programación
estructurada</a> (<a href="http://aljibe.sip.ucm.es/recursos/progr-pascal/">Pascal</a>
y C, por citar algunos, son ejemplos de lenguajes orientados a la <a href="http://www.utm.mx/~rruiz/materias/PE/ipe.htm">programación
estructurada</a>).</p>
<p>Por otra parte, la <a href="http://www.cobolstandard.info/" lang="en">alta
estandarización</a> adoptada desde el inicio de su desarrollo, y la especial
atención de este lenguaje a la correcta expresión de las estructuras de datos
[<a href="http://www3.uji.es/~sanchiz/Docencia/F05/">1</a>] [<a href="http://www.algoritmia.net/articles.php?folder=Estructuras%20de%20Datos">2</a>],
entre otras características, ha permitido que todavía hoy
en día sigan operando, en el mundo bancario, empresarial
y comercial, aplicaciones con 40 años a sus espaldas, demostrando
una solidez y estabilidad muy notables, una vez superados los problemas
que el denominado "<a href="http://www.cibersociedad.net/textos/articulo.php?art=10">efecto
del año 2000</a>" (consistente en los problemas derivados del uso
de dos dígitos para almacenar fechas en los sistemas antiguos) supuso,
en algunos casos, para su operatividad y correcto funcionamiento.</p>
<p>Más información sobre el lenguaje <acronym title="COmmon Business Oriented Language" lang="en">COBOL</acronym>:
[<a href="http://www.csis.ul.ie/cobol/" lang="en">1</a>] [<a href="http://homepage.ntlworld.com/zingmatter/zingcobol/" lang="en">2</a>]
[<a href="http://www.cobolportal.com/" lang="en">3</a>] [<a href="http://www.cobol.org/" lang="en">4</a>]
[<a href="http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl?_key=COBOL" lang="en">5</a>]
[<a href="http://wombat.doc.ic.ac.uk/foldoc/foldoc.cgi?query=cobol&action=Search" lang="en">6</a>]
[<a href="http://en.wikipedia.org/wiki/COBOL" lang="en">7</a>]</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1086221973473852652004-06-03T02:17:00.000+02:002004-06-03T10:59:40.306+02:00Conciencia humana e inteligencia artificial<p>Para romper el largo periodo de tiempo transcurrido sin dejar nada escrito
por estos lares, y en espera, entre otras cosas, de mayores cotas de inspiración, indico
a continuación algunos artículos y anotaciones que me han
llamado agradablemente la atención en las últimas semanas:</p>
<ul class="conmargeninf">
<li>
<a href="http://davis.wpi.edu/~matt/courses/soms/" lang="en">Self Organizing
Maps</a> (por T. Germano; descripción de la aplicación de
las redes neuronales artificiales a la clasificación y visualización
de información).</li>
<li>
<a href="http://kirai.bitacoras.com/index.php?m=200404#73">Lógica
Difusa - Fuzzy Logic</a> (por Héctor García en <a href="http://kirai.bitacoras.com/">Kirai.Net</a>).</li>
<li>
<a href="http://www.mycgiserver.com/~gpiancastelli/blog/archives/000064.html" lang="en">A
Prolog introduction for hackers</a> (comentario en <a href="http://www.mycgiserver.com/~gpiancastelli/blog/" lang="en">Through
the blogging-glass</a> al <a href="http://www.kuro5hin.org/story/2004/2/25/124713/784" lang="en">tutorial
sobre Prolog</a> publicado en <a href="http://www.kuro5hin.org" lang="en">kuro5hin.org</a>).</li>
<li>
¿Cómo funciona un buscador? [<a href="http://kirai.bitacoras.com/index.php?p=62">1</a>],
[<a href="http://kirai.bitacoras.com/index?p=102">2</a>], [<a href="http://kirai.bitacoras.com/index.php?p=111">3</a>]
y [<a href="http://kirai.bitacoras.com/index.php?p=116" title="PageRank">4</a>]
(por Héctor García en <a href="http://kirai.bitacoras.com/">Kirai.Net</a>).</li>
<li>
<a href="http://www.programacion.com/articulo/grafos_asignacion/">Problema
de Asignación de Horarios</a> (aplicación práctica
de ciertos aspectos de la teoría de grafos; A. Arranz Ordóñez
y E. Cuesta Guzmán, en <a href="http://www.programacion.com/">Programación
en Castellano</a>).</li>
<li>
<a href="http://www.generation5.org/content/2004/MultiBP.asp" lang="en">Multi-Backpropagation
Network: Concept and Modeling</a> ("Backpropagation network is one of the
well known <acronym title="Neural Network" lang="en">NN</acronym>
model. However, large network is too complex and takes a long time to train...";
en <a href="http://www.generation5.org/" lang="en">Generation5</a>).</li>
<li>
<a href="http://kirai.bitacoras.com/index.php?p=120">George Boole</a> (sobre
la lógica <em>booleana</em>, digital o binaria; por Héctor
García en <a href="http://kirai.bitacoras.com/">Kirai.Net</a>).</li>
</ul>
<p>Como puede verse, un lugar preferente de mención en esta pequeña
lista, se lo lleva sin duda Héctor García, y en este punto
me parece pertinente comentar que es muy encomiable la forma que tiene
de abordar los temas de los que trata por lo común en su bitácora
(<a href="http://kirai.bitacoras.com/">Kirai.Net</a>), al margen de aquellos
de carácter e interés más o menos estrictamente personal
y particular, a saber: fundamentos de computación, Inteligencia
Artificial y sus aplicaciones, programación en general... Se nota
de verás su notable esfuerzo por hacer asequibles y comprensibles,
para "el común de los mortales", dichos asuntos.</p>
<p>En otra de sus anotaciones, "<a href="http://kirai.bitacoras.com/index.php?p=94">El
test de Turing y los ordenadores Inteligentes</a>", aborda un tema que
tradicionalmente ha levantado, y sin duda seguirá levantando, gran
polémica y diversidad de opiniones: básicamente, aquella
que se refiere a cómo definir lo que podríamos denominar
como verdadera <em>inteligencia artificial</em>, cuales son las características
diferenciadoras y definitorias de un sistema autónomo, para considerar
que está dotado de las propiedades y funciones inherentes a la inteligencia
humana (si es que algún día se alcanza a conocer y comprender
la totalidad de esas propiedades y funciones, desde una perspectiva unitaria),
es decir aquellas que son expresión de la naturaleza y funcionamiento
de los procesos cognitivos, de razonamiento y aprendizaje, que se dan en
la mente de los seres humanos.</p>
<p>En los <a href="http://kirai.bitacoras.com/index.php?p=94#comments">comentarios
a dicha anotación</a>, podemos leer interesantes opiniones al respecto,
y en este punto me gustaría aportar una reflexión hecha por
el escritor y crítico inglés David Lodge [<a href="http://www.contemporarywriters.com/authors/?p=auth62" lang="en">1</a>]
[<a href="http://www3.shropshire-cc.gov.uk/lodge.htm" lang="en">2</a>],
en el contexto de una entrevista publicada en la edición del suplemento
Babelia del diario <a href="http://www.elpais.es">El País</a> del
pasado 1 de mayo ("En defensa de la ficción", básicamente
versa sobre la importancia del género de la novela, de la ficción,
en tanto que instrumento de representación de la conciencia humana,
variable en función de distintos periodos a lo largo del tiempo).
Pregunta la entrevistadora (Lourdes Gómez): "¿Cree que la
conciencia es el <em>software</em> de la mente humana?", y Lodge contesta:</p>
<blockquote>«En el sentido literario es una buena metáfora
para describir la conciencia. Otra cuestión es si la mente humana
funciona como un ordenador. Yo creo que el ordenador es un tipo de cerebro
bastante limitado. Se dan analogías en su funcionamiento, pero también
importantes diferencias. Principalmente en la conectividad de la mente
humana y la ejecución de funciones simultáneas. Un ordenador
nunca podrá replicar estas características pese a lo que
nos aseguren los expertos en inteligencia artificial. Los ordenadores son
mucho más rápidos que el cerebro humano, pero no creo que
sean capaces de eliminar intuitivamente los elementos irrelevantes de una
función. Nos ganarán en el ajedrez, pero nunca en la toma
de decisiones que requiere una habilidad intuitiva.»</blockquote>
<p>Apartándome un tanto de la reflexión de Lodge -que en todo
caso no deja de ser una opinión, avalada eso si por el conocimiento
atesorado en dos años de estudio dedicados a las ciencias cognoscitivas,
la inteligencia artificial y el fenómeno de la conciencia, con la
vista puesta en la preparación de su novela <em>Pensamientos secretos</em>
(<a href="http://www.anagrama-ed.es/">Anagrama</a>, 2002; ISBN: 84-339-69893-8),
como explica el propio autor en la entrevista-, y sin pretender entrar
en grandes profundidades en lo que se refiere a este tema, es evidente
que difícilmente se podrán trasladar las características
de la inteligencia humana y sus procesos cognitivos a un sistema autónomo
artificial, creando por tanto "inteligencia artificial", si no se alcanza
a entender en su totalidad el funcionamiento de dichos procesos, y parece
ser que las disciplinas científicas que se ocupan de estos menesteres
(tanto en lo que se refiere a los procesos físico-químicos,
como los referidos a los de transferencia y procesamiento de información),
están bastante lejos de alcanzar un estado de conocimiento óptimo
y "global" acerca de las evidentes complejidades, mayores de las que en
un principio se pensó al abordar su estudio, de la mente humana.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1081931437573388922004-04-14T10:30:00.000+02:002004-04-15T20:17:26.233+02:00Seminarios sobre Programación Lógica y Declarativa<p>Nos hacemos eco en esta ocasión de tres citas que, en el ámbito
de las conferencias y los encuentros referidos a la programación
<a href="http://www.cs.uu.nl/people/jeroen/courses/fp-sp.pdf">declarativa/funcional</a>
(en <acronym title="Portable Document Format" lang="en">PDF</acronym>) y lógica, están por celebrarse en los
próximos meses:</p>
<p><a href="http://www.cs.uni-bonn.de/~costanza/lisp-ecoop/" lang="en">1st
European Lisp and Scheme Workshop</a> (Oslo, 13 de junio 2004)</p>
<blockquote>
"Lisp has a tradition of providing a fruitful basis for language
design experiments for many decades. The structure of Lisp, including Common
Lisp and Scheme as its major dialects of today, makes it easy to extend
the language or even to implement entirely new dialects without starting
from scratch. Common Lisp, with the Common Lisp Object System (CLOS), was
the first object-oriented programming language to receive an ANSI standard
at the beginning of the 1990's. It is, arguably, the most complete and
advanced object system of any programming language, and has influenced
many other object-oriented programming languages that were to follow."
<div class="cita">[<a href="http://www.cs.uni-bonn.de/~costanza/lisp-ecoop/" lang="en">continúa</a>]</div>
</blockquote>
<p><a href="http://clip.dia.fi.upm.es/Conferences/CICLOPS-2004/" lang="en">Colloquium
on Implementation of Constraint and LOgic Programming Systems</a> (CICLOPS 2004)</p>
<blockquote>
"This workshop aims at discussing and exchanging experience
on the design, implementation, and optimization of logic, constraint (logic)
programming systems, and systems intimately related to logic as a means
to express computations. Experience backed up by real implementations and
their evaluation will be given preference, as well as descriptions of work
in progress in that direction."
<div class="cita">[<a href="http://clip.dia.fi.upm.es/Conferences/CICLOPS-2004/" lang="en">continúa</a>]</div>
</blockquote>
<p><a href="http://clip.dia.fi.upm.es/Conferences/WLPE04/" lang="en">The 14th
workshop on logic programming environments</a> (WLPE' 04)</p>
<blockquote>
"The aim of the workshop is to provide an informal meeting
for the researchers working on tools for the development and analysis of
logic programs. This year we want to emphasize two aspects: on one hand
we want to discuss the presentation, pragmatics and experiences of such
tools; on the other one, we want to extend the concept of "logic programming"
environments to tools developed for any language based on computational
logic (constraints, integration of paradigms, specification languages, ...)."
<div class="cita">[<a href="http://clip.dia.fi.upm.es/Conferences/WLPE04/" lang="en">continúa</a>]</div>
</blockquote>
<p>De la primera cita (de cuya celebración nos hemos enterado vía
<a href="http://home.comcast.net/~bc19191/blog/040406.html" lang="en">Bill
Clementson's Blog</a>, "<em>Bits and pieces (mostly Lisp-related) that I
collect from the ether</em>") están disponibles, en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>,
los <em>papers</em> (comunicaciones, ponencias) <a href="http://www.cs.uni-bonn.de/~costanza/lisp-ecoop/papers.htm" lang="en">recibidos
hasta el momento</a>. En cuanto a los <em><a href="http://www.irisa.fr/manifestations/2004/ICLP04/workshops.htm" lang="en">workshops</a></em>
(talleres de trabajo, seminarios) <a href="http://clip.dia.fi.upm.es/Conferences/CICLOPS-2004/" lang="en">CICLOPS
2004</a> y <a href="http://clip.dia.fi.upm.es/Conferences/WLPE04/" lang="en">WLPE'
04</a>, decir que se celebrarán en el marco la <a href="http://www.irisa.fr/manifestations/2004/ICLP04/" lang="en">20th
International Conference on Logic Programming</a> (ICLP'04, 6-10 de septiembre
2004, Saint-Malo, Francia), organizada por la <a href="http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/" lang="en">Association
for Logic Programming</a> (ALP).</p>
<p><a href="http://lml.ls.fi.upm.es/~mcarro/" lang="en">Manuel Carro</a>
y <a href="http://clip.dia.fi.upm.es/~jgomez/" lang="en">José Manuel
Gómez-Perez</a>, dos de los organizadores y coordinadores de los
seminarios encuadrados en la <a href="http://www.irisa.fr/manifestations/2004/ICLP04/" lang="en">ICLP'04</a>
a los que acabamos de hacer referencia, son miembros del <a href="http://www.clip.dia.fi.upm.es/" lang="en">CLIP
Lab</a> (<em>The Computational logic, Languages, Implementation, and Parallelism
Lab</em>) de la Facultad de Informática, Universidad Politécnica
de Madrid, cuya área de actividad se centra en la Programación
Lógica en general y la <a href="http://www.clip.dia.fi.upm.es/logic_programming_repositories.html" lang="en">Programación
Lógica con Restricciones</a> (<em>Constraint Logic Programming</em>,
CLP) en particular. En este contexto de actividad, los miembros del <a href="http://www.clip.dia.fi.upm.es/" lang="en">CLIP
Lab</a> han desarrollado el sistema <a href="http://www.clip.dia.fi.upm.es/Software/Ciao/" lang="en">Ciao
Prolog</a>:</p>
<blockquote>
"[...] entorno de programación lógica y de restricciones
[...] es uno de los <a href="http://www.clip.dia.fi.upm.es/Software/" lang="en">sistemas
desarrollados</a> por el grupo CLIP. [...] es software libre [...] y se
está utilizando actualmente tanto en aplicaciones empresariales
como en el entorno académico [...]. Entre las ventajas ofrecidas
por Ciao Prolog resalta su extensibilidad, que ha permitido desarrollar
muchas librerías que añaden funcionalidades significativas
al sistema, tales como resolutores de restricciones, concurrencia, primitivas
para la programación distribuida y de agentes inteligentes, persistencia,
orden superior, objetos, interfaces a otros lenguajes de programación,
etc. Como ejemplos podemos destacar la librería <a href="http://www.clip.dia.fi.upm.es/Software/pillow/pillow.html" lang="en">PiLLoW</a>,
posiblemente el componente más utilizado para la interconexión
entre sistemas de programación lógica (y de restricciones)
y la <acronym title="World Wide Web" lang="en">WWW</acronym>, y <a href="http://www.clip.dia.fi.upm.es/Software/Ciao/index.html#lpdoc" lang="en">LPdoc</a>,
un generador automático de documentación para sistemas de
programación lógica y de restricciones, ambos distribuidos
como software libre."
<div class="cita">[<a href="http://www.clip.dia.fi.upm.es/clip_spanish/">fuente</a>]</div>
</blockquote>
<p>La mayor parte de los informes técnicos (<em>Technical Reports</em>) producidos
por los miembros del <a href="http://www.clip.dia.fi.upm.es/" lang="en">CLIP
Lab</a>, están disponibles para su consulta, ordenados <a href="http://www.clip.dia.fi.upm.es/clippubsbytopic/clippubsbytopic.html" lang="en">por
área de interés</a> y <a href="http://www.clip.dia.fi.upm.es/clippubsbyyear/clippubsbyyear.html" lang="en">por
año de producción</a> (los formatos de los documentos son <acronym title="Portable Document Format" lang="en">PDF</acronym>
y <acronym title="PostScript" lang="en">PS</acronym>). Salvo que se
busque un texto en concreto, del que se tenga noticia previamente, en cuyo
caso es más directo y rápido realizar la búsqueda
por año, lo más práctico y productivo es efectuarla
a través de la ordenación <a href="http://www.clip.dia.fi.upm.es/clippubsbytopic/clippubsbytopic.html" lang="en">por
tema de investigación</a>. Más información sobre las
conferencias y seminarios coorganizados por este laboratorio <a href="http://www.clip.dia.fi.upm.es/Conferences/" lang="en">en
la página correspondiente</a>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1081356217011283942004-04-07T18:43:00.000+02:002004-05-16T01:52:13.013+02:00Prolog + Scheme = Schelog<p><a href="http://www.ccs.neu.edu/home/dorai/schelog/schelog.html" lang="en">Schelog</a>
es una implementación desarrollada por <a href="http://www.ccs.neu.edu/~dorai/" lang="en">D.
Sitaram</a> que permite combinar fragmentos de código escritos en
un estilo de programación similar a <a href="http://www.cse.unsw.edu.au/~billw/prologdict.html" title="The Prolog Dictionary" lang="en">Prolog</a>
(incluyendo las principales características de este lenguaje tales
como el <em>backtracking</em> o retroceso, la unificación, el corte,
la negación, <a href="http://www.programacion.com/tutorial/prolog3/4/">predicados
meta-lógicos</a>, etc.) con expresiones en <a href="http://www.swiss.ai.mit.edu/projects/scheme/index.html" lang="en">Scheme</a>
<em>puro</em> o convencional (Scheme es un lenguaje derivado de <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?Lisp" lang="en"><acronym title="LISt Processing" lang="en">Lisp</acronym></a>
- ver la <a href="http://programacionlogica.blogspot.com/2004_04_01_programacionlogica_archive.html#108086277849012996">anterior
anotación</a> en la que hacíamos referencia a este último),
dentro de una misma aplicación:</p>
<blockquote>
Schelog is an <em>embedding</em> of Prolog-style logic programming
in Scheme. "Embedding'' means you don't lose Scheme: You can use Prolog-style
and conventional Scheme code fragments alongside each other. Schelog contains
the full repertoire of Prolog features, including meta-logical and second-order
("set'') predicates, leaving out only those features that could more easily
and more efficiently be done with Scheme subexpressions.
<div class="cita">En <em><a href="http://www.ccs.neu.edu/home/dorai/schelog/schelog.html" lang="en">Programming
in Schelog</a></em></div>
</blockquote>
<p>La sintaxis de Schelog es la propia del <a href="http://grimpeur.tamu.edu/~colin/lp/" lang="en">lenguaje
Lisp/Scheme</a> (básicamente, consiste en listas anidadas e indentadas,
sin comas, indicadas mediante paréntesis, anteposición de
los signos de operación a los argumentos, cadenas de caracteres
entre comillas, etc.). A modo de ejemplo, se indica a continuación
la porción de código necesaria para calcular, recursivamente,
el factorial de un número, en Prolog en primer lugar, y <a href="http://www.ccs.neu.edu/home/dorai/schelog/schelog-Z-H-8.html#node_sec_8" lang="en">en
Schelog</a> en segundo (recordemos que el factorial de un número
natural <em>n</em>, es el producto de todos los números naturales
desde 1 hasta <em>n</em>):</p>
<pre>factorial(0,1):- !.
factorial(X,Y):- X1 is X-1,
factorial(X1,Y1),
Y is X*Y1.
(define %factorial
(%rel (x y x1 y1)
[(0 1) !]
[(x y) (< x 0) ! %fail]
[(x y) (%is x1 (- x 1))
(%factorial x1 y1)
(%is y (* y1 x))]))</pre>
<p>Schelog puede ser considerado como una combinación entre los estilos
de programación o <em>paradigmas</em> representados por el lenguaje
Prolog por un lado (<a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?logic+programming" lang="en">programación
lógica</a>), y el <em>dialecto</em> de <a href="http://www.paulgraham.com/lisp.html" lang="en">Lisp</a>
<em>Scheme</em> por otro (programación <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?functional+programming" lang="en">declarativa y funcional</a>).
"<a href="http://www.ccs.neu.edu/home/dorai/schelog/schelog.html" lang="en">Programming
in Schelog</a>" es una introducción en la que el mencionado <a href="http://www.ccs.neu.edu/~dorai/" lang="en">D.
Sitaram</a> aborda la sintaxis y la programación mediante la implementación
que venimos comentando. Por otra parte, y de este mismo autor, "<a href="http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html" lang="en">Teach
Yourself Scheme in Fixnum Days</a>" es una guía rápida e
introducción al lenguaje Scheme.</p>
<p>Finalmente, recomendar la lectura de una introducción de carácter
general, referida a los orígenes del lenguaje Scheme: "<a href="http://www.lania.mx/biblioteca/newsletters/1996-primavera-verano/art3.html">Scheme:
lo pequeño es bello - Un lenguaje de programación ideal para
la enseñanza</a>" (<a href="http://delta.cs.cinvestav.mx/~ccoello/page.html">Carlos
Coello</a>). Este artículo fue <a href="http://delta.cs.cinvestav.mx/~ccoello/scheme.zip">publicado
posteriormente</a> (<a href="http://www.cs.wisc.edu/~ghost/" lang="en">formato <acronym title="PostScript" lang="en">PS</acronym></a>
comprimido en un .zip) por el autor, con idéntico título
y más extensión y profundidad, en la revista <em>Soluciones
Avanzadas</em> (números 39 y 43; actualmente esta publicación
parece no estar disponible en línea, si bien en <a href="http://web.archive.org/" lang="en">Internet
Archive</a> es posible localizar <a href="http://web.archive.org/web/*/http://www.fciencias.unam.mx/revista/soluciones.html" lang="en">varias
copias</a>). Esta nueva versión ampliada de "Scheme: lo pequeño
es bello..." añade, a la explicación de la parte histórica
y de desarrollo del lenguaje Scheme, una introducción, con ejemplos,
a sus características esenciales y sintaxis de uso, principales
versiones y extensiones, así como una consideración final
en torno a su utilidad en la investigación y enseñanza en
el campo de los lenguajes de programación ("Scheme como un instrumento para la enseñanza").</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.comtag:blogger.com,1999:blog-5454882.post-1080862778490129962004-04-02T01:39:00.000+02:002004-04-07T00:41:23.123+02:00Lisp y Java -artículo-<p>No todo va a ser Prolog en el ámbito de la programación
declarativa... A través de <a href="http://lemonodor.com/archives/000752.html" lang="en">Lemonodor</a>,
<em>weblog</em> dedicado al lenguaje Lisp (<em>LISt Processing</em>) y sus
tecnologías asociadas (aunque también tratan bastantes temas
relacionados con la robótica), llegamos al artículo <em><a href="http://www.onjava.com/pub/a/onjava/2004/03/24/lisp.html" lang="en">Lisp
and Java</a></em> (D. Milstein):</p>
<blockquote>
"First-class <a href="http://grimpeur.tamu.edu/~colin/lp/node15.html" lang="en">functions</a>
are a powerful feature of the Lisp programming language. This article describes
some ways they can be used, and explores how to approximate them in Java."
</blockquote>
<p>El lenguaje Lisp [<a href="http://store.yahoo.com/paulgraham/lisp.html" lang="en">1</a>]
[<a href="http://www.alu.org/" lang="en">2</a>] [<a href="http://www.apl.jhu.edu/~hall/lisp.html" lang="en">3</a>]
[<a href="http://simon.incutio.com/archive/2002/09/27/functionalProgramming" lang="en">4</a>]
[<a href="http://en.wikipedia.org/wiki/Lisp_programming_language" lang="en">5</a>],
desarrollado inicialmente a finales de los años 50 del siglo pasado por
<a href="http://www-formal.stanford.edu/jmc/" lang="en">John McCarthy</a>
(ver al respecto su ensayo <em><a href="http://www-formal.stanford.edu/jmc/history/lisp/lisp.html" lang="en">History
of Lisp</a></em>), es sin duda uno más conocidos y utilizados dentro
del paradigma de programación <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?declarative+language" lang="en">declarativo/funcional</a>,
y base para el desarrollo de otros lenguajes y dialectos similares, de características
más avanzadas y modernas, o simplemente orientados hacia otros ámbitos de aplicación (es el caso, por
ejemplo, del lenguaje <a href="http://el.media.mit.edu/logo-foundation/" title="Logo Foundation" lang="en">Logo</a>). Lisp es un lenguaje muy utilizado y extendido en el mundo anglosajón,
específicamente en Estados Unidos, sobre todo mediante la implementación
Commom Lisp, y tradicionalmente se ha utilizado, tanto en el ámbito académico como en el empresarial, para programar aplicaciones
orientadas a procesos de Inteligencia Artificial (<acronym title="Artificial Intelligence" lang="en">AI</acronym>)
-de hecho puede decirse que fue creado y desarrollado con esta finalidad, y es considerado por tanto
"el primer lenguaje de <acronym title="Inteligencia Artificial">IA</acronym>"-,
y <a href="http://www.cogs.susx.ac.uk/lab/nlp/gazdar/nlp-in-lisp/index.html" title="NLP in Lisp" lang="en">procesamiento
del lenguaje natural</a> (<acronym title="Natural Language Processing" lang="en">NLP</acronym>),
si bien hoy en día es posible incluso encontrar, por poner un ejemplo
de sus múltiples aplicaciones, <a href="http://www.ai.mit.edu/projects/iiip/doc/cl-http/home-page.html" lang="Common Lisp Hypermedia Server" lang="en">servidores
<em>web</em></a> desarrollados mediante este lenguaje de programación.</p>
<p>Más información sobre el lenguaje Lisp:</p>
<ul>
<li>
<a href="http://www.gigamonkeys.com/book/" lang="en">Practical Common Lisp</a>
(Peter Seibel).</li>
<li>
<a href="http://www.paulgraham.com/onlisp.html" lang="en">On Lisp</a> (P.
Graham).</li>
<li>
<a href="http://grimpeur.tamu.edu/~colin/lp/" lang="en">LISP Primer</a>
(C. Allen, M. Dhagat; <a href="http://burks.bton.ac.uk/burks/language/lisp/lprimer/lp.htm" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.cliki.net/" lang="en">CLiki, the common lisp wiki</a>.</li>
<li>
<a href="http://www.csc.vill.edu/~dmatusze/resources/lisp/intro_to_lisp/lisp.html" lang="en">A
Concise Introduction to LISP</a> (David L. Matuszek).</li>
<li>
<a href="http://www-2.cs.cmu.edu/~dst/LispBook/index.html" lang="en">Common
Lisp: A Gentle Introduction to Symbolic Computation</a> (David S. Touretzky).</li>
<li>
<a href="http://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html" lang="en">Common
Lisp the Language, 2nd Edition</a> (<a href="http://www.supelec.fr/docs/cltl/cltl2.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/lisp/top.html" lang="en">Lisp
FAQ</a>.</li>
<li>
<a href="http://www8.informatik.uni-erlangen.de/html/lisp/histlit1.html" lang="en">Early
LISP History (1956-1959)</a> / <a href="http://www8.informatik.uni-erlangen.de/html/lisp/mcc91.html" lang="en">The
Influence of the Designer on the Design - J. McCarthy and LISP</a> (H.
Stoyan).</li>
<li>
<a href="http://www.fast-index.com/declarative/lectures/" lang="en">Lisp
Lectures</a> (N. Levine).</li>
<li>
<a href="http://cs1.cs.nyu.edu/phd_students/schwarz/NLCP/lisp.html" lang="en">LISP
Tutorial</a> (M. Schwarz).</li>
<li>
<a href="http://psg.com/~dlamkins/sl/cover.html" lang="en">Successful Lisp:
How to Understand and Use Common Lisp</a> (David B. Lamkins).</li>
<li>
<a href="http://cl-cookbook.sourceforge.net/" lang="en">The Common Lisp
Cookbook</a>.</li>
<li>
<a href="http://www.htus.org/" lang="en">How to Use Scheme. Writing Scripts
and Programs with PLT Scheme</a> (M. Felleisen <em>et al</em>.).</li>
<li>
<a href="http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html" lang="en">Teach
Yourself Scheme in Fixnum Days</a> (<a href="http://www.ccs.neu.edu/home/dorai/" lang="en">D.
Sitaram</a>).</li>
</ul>
<p>Para ilustrar los ejemplos, el autor de <em><a href="http://www.onjava.com/pub/a/onjava/2004/03/24/lisp.html" lang="en">Lisp
and Java</a></em> ha utilizado un dialecto de Lisp, denominado Scheme [<a href="http://swiss.csail.mit.edu/projects/scheme/" lang="en">1</a>]
[<a href="http://www.schemers.org/" lang="en">2</a>].</p>
<p>El artículo está publicado en <a href="http://www.onjava.com/" lang="en">ONJava.com</a>
(de cuya portada principal hemos tomado la breve sinopsis en inglés),
estupenda fuente de referencia en la que encontrar buenos artículos
y otras referencias relativas al lenguaje Java y sus múltiples aplicaciones.
Por otra parte, <a href="http://www.onjava.com/" lang="en">ONJava.com</a>
es una publicación electrónica englobada bajo el proyecto
corporativo <a href="http://www.oreilly.com/" lang="en">O'Reilly.com</a>
de Tim O'Reilly, <a href="http://www.oreilly.com/oreilly/about.html" lang="en">dedicado</a>
a la publicación de libros, impartición de conferencias y
cursos, y creación de sitios <em>web</em> (<em>Resource Centers</em>)
y publicaciones <em>on-line</em> (<em>Online Publications</em>: <a href="http://www.xml.com/" lang="en">XML.com</a>,
<a href="http://www.perl.com/" lang="en">Perl.com</a>, etc.) sobre tecnologías
informáticas y lenguajes de programación (<a href="http://perl.oreilly.com/" lang="en">Perl</a>,
<a href="http://python.oreilly.com/" lang="en">Python</a>, <a href="http://cprog.oreilly.com/" lang="en">C/C++</a>, <a href="http://xml.oreilly.com/" lang="en"><acronym title="Extensible Markup Language" lang="en">XML</acronym></a>,
<a href="http://dotnet.oreilly.com/" lang="en">.NET</a>, etc.), con una
clara orientación hacia aquellas tecnologías relativas al
desarrollo de aplicaciones bajo entornos <em>web</em>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1080646954789237192004-03-30T13:42:00.000+02:002004-03-31T11:37:02.296+02:00A propósito de la fórmula de Kowalski<p>Siguiendo el estilo del que hasta hace poco tiempo era el diseño
de mi <a href="http://vistoyleido.blogspot.com/">bitácora hermana</a>,
hace poco más de un mes se cambió el aspecto de <a href="http://programacionlogica.blogspot.com/" class="interno">ProLog IR</a>,
si bien, por diversas circunstancias -las mismas que durante este tiempo
han mantenido en "silencio" este espacio de publicación- hasta este
momento no se ha hecho una referencia explícita a esta circunstancia.
Básicamente el trabajo de rediseño ha consistido en eliminar
las tablas como sistema de maquetación, y realizar ésta última
enteramente con <acronym title="Cascading Style Sheets" lang="en">CSS</acronym>.
La ventaja de tener la página estructurada de esta forma, al margen
de <a href="http://validator.w3.org/" lang="en">cumplir</a> más
o menos con los <a href="http://www.w3.org/" lang="en">estándares</a>
existentes al efecto, es que se pueden separar completamente los bloques
de contenido de la presentación en sí, y de esta manera introducir
más fácilmente futuros cambios de estilo y aspecto. De hecho
el estilo que se puede ver en estos momentos pretendo que sea provisional,
ya que entre otras cuestiones, y en su actual configuración, puede
presentar algunos problemas de visualización en Internet Explorer
(¡como no!), según sea la resolución de pantalla utilizada.</p>
<p>También tengo en mente un futuro <a href="http://prolog.f2o.org/">cambio
de hospedaje</a> y de sistema de publicación (¿<a href="http://wordpress.org/" lang="en">WordPress</a>?)
a corto plazo, si el tiempo y las ganas lo permiten... En cualquier caso,
lo importante, y de lo que se trata, cuestiones de estilo al margen, es
ofrecer contenidos interesantes, y en este sentido espero "ponerme las
pilas" en lo sucesivo, ya que últimamente he dilatado en exceso
los intervalos de publicación, aún a pesar de que las estadísticas
me demuestran que, más que usuarios asiduos y fieles, el perfil
de los visitantes de este sitio se corresponde con personas que acceden,
de forma significativamente mayoritaria,
<a href="http://www.nedstatbasic.net/s?tab=1&link=4&id=2373444">a
través de buscadores</a> (Google especialmente, como no podía
ser de otra forma, al menos hoy por hoy) y metabuscadores, y de las correspondientes
ecuaciones de búsqueda -algunas muy interesantes y sorprendentes,
por cierto- cuyo análisis permite al tiempo establecer si existe
una adecuada correspondencia entre los temas comúnmente tratados
y las búsquedas equivalentes a esos temas por parte de los usuarios.</p>
<p>Bien, ahora toca aclarar el sentido y significado de la cita que de
momento comparte protagonismo con la cabecera de la página: «Algorithm
= Logic + Control». Esta "ecuación", de carácter muy
general, ha hecho fortuna a la hora explicitar, de forma gráfica
y condensada, los principios y fundamentos implícitos en el paradigma
de la programación lógica (asociándose este esquema,
de modo particular, con la programación lógica con restricciones),
y en general en el análisis de los programas informáticos,
y no es sino el título de un artículo en el que el autor,
<a href="http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/rak.html" lang="en">Robert
Kowalski</a>, explica su noción de la programación declarativa
en general y lógica en particular, de desarrollo incipiente por
los años en que fue publicado. La reseña completa de dicho
artículo es la siguiente:</p>
<blockquote>
Kowalski, R. (1979), "Algorithm = logic + control", <em>Communications
of the <acronym title="Association for Computing Machinery" lang="en">ACM</acronym></em>,
22 (7), pp. 424-436.
<div class="cita">[<a href="http://portal.acm.org/citation.cfm?doid=359131.359136" lang="en">referencia
completa</a>]</div>
</blockquote>
<p>El texto completo, en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>,
está <a href="http://portal.acm.org/citation.cfm?doid=359131.359136" lang="en">disponible</a>
en la <a href="http://portal.acm.org/dl.cfm" lang="en">biblioteca digital</a>
de la <a href="http://www.acm.org/" lang="en"><acronym title="Association for Computing Machinery" lang="en">ACM</acronym></a>,
si bien el acceso está limitado a suscriptores de pago. Sí
es de acceso libre la reseña, el resumen, y la bibliografía
que acompañan al texto original. El artículo fue republicado
posteriormente dentro de la obra <em>Programming Languages: A Grand Tour</em>
(3ª edición, E. Horwitz ed., Computer Science Press: Maryland,
1986, pp. 480-492).</p>
<p>Al formular esta expresión, que viene a simbolizar, en forma
de "ecuación", el paradigma de la programación lógica,
Kowalski expresaba que en cualquier programa informático podemos
distinguir dos aspectos constitutivos esenciales: lo que queremos que el
programa haga (o parte lógica del programa, el <em>qué</em>)
y la forma en que dicho programa debe resolver ese objetivo (el
<em>cómo</em>, la parte de control). En este sentido, el paradigma de la programación
lógica, y en general el paradigma de la <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?declarative+language" lang="en">programación
declarativa</a> (que engloba por una parte la <a href="http://www.cs.nott.ac.uk/~gmh//faq.html" lang="en">programación
funcional</a> -<a href="http://www.haskell.org/" title="The Haskell Home Page" lang="en">Haskell</a>,
<a href="http://www-formal.stanford.edu/jmc/history/lisp/lisp.html" title="History of Lisp" lang="en">Lisp</a>,
etc.- y por otra la programación lógica), claramente se centra
más en facilitar <em>qué</em> queremos que haga el programa
-el objetivo prefijado de antemano-, que en <em>cómo</em> lo debe
hacer para alcanzarlo, lo cual no excluye la existencia de poderosas estructuras
de control como son las que vienen representadas, en el lenguaje Prolog,
por los mecanismos de <em>instanciación</em> de variables, <em>verificación</em>
y <em>unificación</em> de estructuras, <em>recursividad</em> y <em>backtracking</em>
o retroceso, por citar los más importantes.</p>
<p>En el capítulo "La caja de Pandora A = L + C y sus variantes",
página 84 y siguientes, de los apuntes de <a href="http://polaris.lcc.uma.es/~blas/">B.
C. Ruiz Jiménez</a>, <em><a href="http://polaris.lcc.uma.es/~blas/apuntes/PDAv/declaII.pdf">Notas
para la asignatura Programación Declarativa Avanzada</a></em> (<a href="http://polaris.lcc.uma.es/">Universidad
de Málaga</a>, documento en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>)
se ofrece una buena explicación del significado e implicaciones
de la fórmula de Kowalski. Por cierto, en este mismo documento se
puede localizar una exposición muy clara de la sinergia y simbiosis
que determinados proyectos aportan entre el paradigma de programación
representado en parte por el lenguaje Prolog, y otra serie de enfoques
(funcional, orientado a objetos, etc.), tal y como mencionábamos
en la anterior anotación ("<a href="http://programacionlogica.blogspot.com/2004_03_01_programacionlogica_archive.html#108055799008550619" class="interno">¿Programación
lógica = Prolog?</a>") a propósito de una referencia publicada
en <a href="http://lambda.weblogs.com/2004/03/27" lang="en">Lambda the
Ultimate</a>. Ver al respecto los apartados "Programación Lógica"
e "Integración de los paradigmas lógico y funcional".</p>
<p>Retomando la explicación de la ecuación de Kowalski, interrumpida
por la referencia del párrafo anterior, podemos decir que en Prolog,
y dadas las características de este lenguaje de programación,
el usuario se preocupa fundamentalmente de implementar la parte "lógica"
de los programas (constituida esencialmente por la base de conocimiento,
las reglas de inferencia, y las consultas), ya que los mecanismos de control
que citábamos anteriormente, aquellos que determinan
<em>cómo</em> el programa resolverá determinado objetivo, se implementan mediante
una serie de algoritmos y mecanismos que funcionan a nivel interno, cuyas
características últimas dependerán del intérprete
utilizado (recordemos que Prolog es un lenguaje interpretado, si bien algunas
implementaciones permiten compilar previamente determinadas instrucciones).</p>
<p>Surge en este punto, al asociar <em>lógica</em> con <em>control</em>,
el planteamiento de la programación con restricciones o <em>Constraint
Programming</em> a fin de aportar mayor control de evaluación o mecanismos
de control, al esquema de la programación lógica y así
hacer plenamente válida la máxima de Kowalski, dándose
lugar de esta forma a la programación lógica con restricciones o
<em>Constraint Logic Programming</em> (CLP). Algunos documentos sobre la
programación con restricciones en general:</p>
<ul>
<li>
<a href="http://www.icparc.ic.ac.uk/eclipse/reports/handbook/handbook.html" lang="en">Constraint
Programming</a> (M. Wallace; también en <a href="http://www.icparc.ic.ac.uk/eclipse/reports/handbook.ps.gz">formato <acronym title="PostScript" lang="en">PS</acronym></a>;
ver especialmente el apartado <em><a href="http://www.icparc.ic.ac.uk/eclipse/reports/handbook/node4.html" lang="en">2.1.1.
Algorithm = Logic + Control</a></em>).</li>
<li>
<a href="http://web.cs.ualberta.ca/~you/courses/325/Mynotes/Log/clp-intro.html" lang="en">Constraint
Programming</a> (notas de curso del profesor <a href="http://web.cs.ualberta.ca/~you/" lang="en">Jia-Huai
You</a>).</li>
<li>
<a href="http://ktiml.mff.cuni.cz/~bartak/constraints/index.html" title="On-line guide to Constraint Programming" lang="en">On-line
guide to Constraint Programming</a> (R. Barták, también autor
de <a href="http://ktiml.mff.cuni.cz/~bartak/prolog/index.html" lang="en">Guide
to Prolog Programming</a>).</li>
</ul>
<p>Sobre la programación lógica con restricciones en particular
ver por ejemplo los siguientes textos:</p>
<ul>
<li>
<a href="http://www.clip.dia.fi.upm.es/~vocal/public_info/index.html" lang="en">An
Introductory Course on Constraint Logic Programming</a> (M. Carro <em>et
al.</em>).</li>
<li>
<a href="http://www.icparc.ic.ac.uk/eclipse/reports/ECRC-93-05.ps.gz">Constraint
Logic Programming - An Informal Introduction</a> (T. Frühwirth <em>et
al.</em>; formato <acronym title="PostScript" lang="en">PS</acronym>).</li>
<li>
<a href="http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/doc/survey/clp.ps" lang="en">Constraint
Logic Programming: A Survey</a> (J. Jaffar, M. J. Mayer; formato <acronym title="PostScript" lang="en">PS</acronym>).</li>
<li>
<a href="http://www.byte.com/art/9502/sec13/art3.htm" lang="en">Constraint
Logic Programming</a> (D. Pountain en <a href="http://www.byte.com/" lang="en">Byte.com</a>).</li>
<li>
<a href="http://www2.ags.uni-sb.de/net-www/Forum/pandora.pdf" lang="en">Assessment
of some issues in Computational Logic theory and program development or
On a Pandora box called 'Algorithm = Logic + Control'</a> (; en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>;
también en <a href="http://www2.ags.uni-sb.de/net-www/Forum/pandora.ps" lang="en">formato <acronym title="PostScript" lang="en">PS</acronym></a>).</li>
<li>
<a href="http://talika.eii.us.es/pablo/pd/">La Programación Lógica
con Restricciones</a> (P. Fernández Montes).</li>
<li>
<a href="http://polaris.lcc.uma.es/~blas/apuntes/PDAv/T2000-2001\G15\programacionLCR.pdf">Programación
Lógica Concurrente y Programación con Restricciones</a> (C.
J. Gálvez <em>et al.</em>; formato <acronym title="Portable Document Format" lang="en">PDF</acronym>).</li>
<li>
<a href="http://www.lambda-systems.com/prolog/constraints.htm" lang="fr">La
Programmation Logique et par Contraintes</a> (L. Jean-Michel en <a href="http://www.lambda-systems.com/accueil.html" lang="fr">Lambda
Systems</a>).</li>
</ul>
<p>Algunas opiniones e interpretaciones al respecto de la "fórmula"
que venimos comentando:</p>
<blockquote>
"The basic property of a declarative programming language is
that a program is a theory in some suitable logic. This property immediately
gives a precise meaning to programs written in the language. From a programmers
point of the basic property is that programming is lifted to a higher level
of abstraction. At this higher level of abstraction the programmer can
concentrate on stating <em>what</em> is to be computed, not necessarily
<em>how</em> it is to be computed. In Kowalski's terms where algorithm = logic + control,
the programmer gives the logic but not necessarily the control."
<div class="cita"><a href="http://www.cs.chalmers.se/~oloft/" lang="en">Olof Torgersson</a>
en <em><a href="http://www.cs.chalmers.se/pub/users/oloft/Papers/wm96/wm96.html" lang="en">A
Note on Declarative Programming Paradigms and the Future of Definitional
Programming</a></em> (el texto en <acronym title="HyperText Markup Language" lang="en">HTML</acronym>
es una versión reducida del original en <a href="http://www.icparc.ic.ac.uk/eclipse/reports/handbook.ps.gz">formato <acronym title="PostScript" lang="en">PS</acronym></a>)</div>
</blockquote>
<blockquote>
"The formula isn't precise, and it won't be precise until someone proposes
a precise and generally accepted notion of how control is to be added to
an expression of the logic of a program. Nevertheless, the idea is attractive,
and I believe it can be made to work for some interesting class of programs.
It is analogous to my comparison of epistemology and heuristics or Chomsky's
competence and performance."
<div class="cita"><a href="http://www-formal.stanford.edu/jmc/" lang="en">John McCarthy</a>
en <em><a href="http://www-formal.stanford.edu/jmc/coloring.html" lang="en">Coloring
Maps and the Kowalski Doctrine</a></em></div>
</blockquote>
<p>En cualquier caso se ofrece una explicación bastante detallada de
la expresión "Algorithm = Logic + Control",
y su significado en relación con la programación lógica,
en otro texto del propio Kowalski, <em>Logic for Problem Solving</em> (North-Holland
Elsevier, 1979), concretamente en el capítulo 5, <em><a href="http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/papers/Chapter5.pdf">The
Procedural Interpretation of Horn Clauses</a></em> (en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>;
página 125 y siguientes, aunque en realidad el capítulo entero
versa sobre esta cuestión). Los capítulos de este libro,
de nivel muy asequible, y a texto completo, están disponibles en formato <acronym title="Portable Document Format" lang="en">PDF</acronym>,
en la <a href="http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/rak.html" lang="en">página
personal</a> de R. Kowalski, en la que además se encuentra
una selección de su más reciente producción bibliográfica,
así como los borradores de los capítulos preliminares del nuevo libro que
está preparando, <em>How to be Artificially Intelligent - the Logical
Way</em>, en el que se abordan los principios fundamentales de la lógica
computacional, y su aplicación a los problemas de la vida cotidiana.</p>
<p>Finalizaremos resaltando que Kowalski es, junto con <a href="http://www.lim.univ-mrs.fr/~colmer/">Alain
Colmerauer</a>, una de las figuras fundamentales en la creación
y desarrollo de la programación lógica en general y del lenguaje
Prolog en particular. Colmerauer, que desde finales de los años
60 del siglo pasado venía trabajando en el tratamiento y procesamiento
del lenguaje natural mediante la aplicación de la lógica
computacional, toma contacto con Kowalski en 1971 al interesarse por sus
trabajos en relación con la demostración automática
de teoremas (<em>theorem proving</em>) y el <a href="http://domino.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1997-2-005" lang="en">método
de resolución</a> SL (<em>SL-resolution</em>), y fruto de esta colaboración
se produce el primer desarrollo efectivo del lenguaje de programación
lógica Prolog. Todo este proceso, junto con otras notas autobiográficas,
es explicado brevemente por el mismo Kowalski en el texto
<em><a href="http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/history.html" lang="en">A
Short Story of My Life and Work</a></em>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com1tag:blogger.com,1999:blog-5454882.post-1080557990085506192004-03-29T12:59:00.000+02:002004-03-30T01:56:24.140+02:00¿Programación lógica = Prolog?<p>La <a href="http://lambda.weblogs.com/2004/03/27" lang="en">referencia</a> al tutorial "<a href="http://homepages.cwi.nl/~apt/ps/lp00.ps">The
Logic Programming Paradigm and Prolog</a>" de <a href="http://homepages.cwi.nl/~apt/" lang="en">K.
R. Apt</a> (Universidad de Amsterdam, documento en formato <acronym title="PostScript" lang="en">PS</acronym>;
realmente se trata del capítulo 15 del libro "<a href="http://www.amazon.com/exec/obidos/tg/detail/-/0521780985/qid=1039677031/sr=8-1/ref=sr_8_1/002-1691379-1817626?v=glance&s=books&n=507846" lang="en">Concepts
in Programming Languages</a>"), está suscitando en <a href="http://lambda.weblogs.com/" lang="en">Lambda
the Ultimate</a> interesantes comentarios que conviene no perderse por
parte de las personas interesadas en este lenguaje de programación,
y en la programación lógica en general. Así por ejemplo,
<a href="http://www.info.ucl.ac.be/people/cvvanroy.html" lang="en">Peter
Van Roy</a>, de la Universidad Católica de Lovaina (Bélgica),
destacado investigador de implementaciones de lenguajes de programación en los dominios de la
programación declarativa, lógica, y con restricciones, entre otros,
<a href="http://lambda.weblogs.com/discuss/msgReader$11662?y=2004&m=3&d=29" lang="en">critica</a> -en una clara referencia al propio <a href="http://homepages.cwi.nl/~apt/" lang="en">Apt</a>-
el, en su opinión, excesivo "ensimismamiento" de algunos programadores...</p>
<blockquote>
"[...] There is a certain class of logic programmers who choose
to ignore anything that does not fit into the cosy little world of Prolog-style logic programming."
<div class="cita">[<a href="http://lambda.weblogs.com/discuss/msgReader$11662?y=2004&m=3&d=29" lang="en">Fuente</a>]</div>
</blockquote>
<p>...interesados casi en exclusiva en el paradigma de la programación
lógica cuando éste se circunscribe a Prolog y otros lenguajes
muy similares (de tal forma que llegan a asumir implícitamente la
ecuación <em>programación lógica</em> = <em>Prolog</em>),
sin tener en consideración otras líneas de desarrollo e investigación
que, tomando como base los fundamentos y aportaciones de dicho paradigma,
tratan de complementar las carencias y limitaciones del lenguaje Prolog
"puro" a la hora de representar y resolver ciertos problemas y planteamientos
computacionales. Como ejemplo de las mencionadas líneas alternativas
de desarrollo de novedosos sistemas de programación, "emparentados"
o <a href="http://www.cs.mu.oz.au/research/mercury/information/doc-latest/transition_guide_toc.html" lang="en">relacionados</a>
hasta cierto punto con el paradigma de la programación lógica,
podemos citar el <a href="http://www.cs.mu.oz.au/research/mercury/" lang="en">proyecto
Mercury</a>, el sistema de programación <a href="http://www.mozart-oz.org/" lang="en">Mozart</a>,
el lenguaje lógico/funcional <a href="http://www.informatik.uni-kiel.de/~curry/" lang="en">Curry</a>, etc., etc.</p>
<p>Muy interesante también el <a href="http://lambda.weblogs.com/discuss/msgReader$11676?y=2004&m=3&d=29" lang="en">comentario
de N. Krishnaswami</a>, que en respuesta a la <a href="http://lambda.weblogs.com/discuss/msgReader$11670?y=2004&m=3&d=29" lang="en">pregunta
de otro participante</a>, explica sucintamente, con un ejemplo, en qué
consiste la programación con restricciones [<a href="http://ktiml.mff.cuni.cz/~bartak/constraints/index.html" lang="en">1</a>]
[<a href="http://web.cs.ualberta.ca/~you/courses/325/Mynotes/Log/clp-intro.html" lang="en">2</a>]
o <em>constraint programming</em> (CP), que en el paradigma lógico/declarativo
da lugar a la <a href="http://www.clip.dia.fi.upm.es/~vocal/public_info/" lang="en">programación
lógica con restricciones</a> o <em>Constraint Logic Programming</em> (CLP).</p>
<p>La <a href="http://lambda.weblogs.com/discuss/msgReader$11661" lang="en">discusión</a>, en los
términos que mencionábamos al comienzo de esta anotación, planteados por Peter Van Roy, por supuesto continúa en el hilo de la <a href="http://lambda.weblogs.com/2004/03/27" lang="en">referencia</a> hecha
en <a href="http://lambda.weblogs.com/" lang="en">Lambda the Ultimate</a>, por lo que no puedo sino recomendar la lectura de los nuevos
comentarios que se van suscitando a raíz de los anteriores.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1078313744560522542004-03-03T12:35:00.000+01:002004-03-03T13:03:16.763+01:00El "spam" como metáfora de un organismo vivo<p>Interesante artículo en el portal <a href="http://www.generation5.org/" lang="en">Generation5</a>:
"<a href="http://www.generation5.org/content/2004/KillSpam.asp" lang="en">Application
of Biological Metaphors for Identifying and Killing Spam</a>" (S. Evans).
¿el tema? creación de un filtro <em>anti-spam</em> utilizando
técnicas de <a href="http://www.dacs.dtic.mil/techs/neural/neural.title.html" lang="en">Redes
Neuronales Artificiales</a> (RNA, <em>Artificial Neural Networks</em>). Como
introducción y argumento teórico, el autor realiza una curiosa
analogía, el fenómeno del <em>spam</em> como un ser vivo (<em>Spam
as a Living Organism</em>), en constante evolución y adaptación
al "medio" (en este caso el correo electrónico y sus formatos y
medios de transmisión a través de Internet), regido por leyes
propias de "adaptación natural".</p>
<blockquote>
Complete with C# source code, this article looks at how to
identify spam using a variety of biological metaphors such as neural networks.
<div class="cita">[<a href="http://www.generation5.org/articles.asp?Action=List&Topic=Natural%20Language%20Processing" lang="en">fuente</a>]</div>
</blockquote>
<p>El artículo incluye el código fuente de dicho filtro, descargable
en un archivo comprimido, y desarrollado en lenguaje <a href="http://www.c-sharpcorner.com/" lang="en">C#</a>.
Como todas las <acronym title="Redes Neuronales Artificiales">RNA</acronym>,
este código necesita de un entrenamiento previo para funcionar correctamente,
como se explica en el texto (<em>Training the Networks)</em>. En el apartado
de resultados, se nos informa de que, en las pruebas realizadas, se ha obtenido
un solo fallo sobre 1000 correos analizados.</p>
<p>En otro orden de asuntos, no muy alejados en todo caso, y también
en <a href="http://www.generation5.org/" lang="en">Generation5</a>, se
publico hace ya varias semanas otro artículo que me gustaría
destacar: "<a href="http://www.generation5.org/content/2004/ai-2004.asp" lang="en">Intelligence
- Artificial and Otherwise</a>" (Bruce L. Toy):</p>
<blockquote>
This paper presents a model of artificial intelligence, based
on an <acronym title="Extensible Markup Language" lang="en">XML</acronym>
memory structure, a logic architecture of divisible processor functions,
and real-time sensor integration. It incorporates learning, consciousness,
creativity, and growth in a framework that can be used to understand human
behavior, build an independent intelligent entity, or integrate a large-scale
computer network into an intelligent system.
<div class="cita">[<a href="http://www.generation5.org/content/2004/ai-2004.asp" lang="en">fuente</a>]</div>
</blockquote>
<p>La utilización de <acronym title="Extensible Markup Language" lang="en">XML</acronym>
para implementar la estructura de memoria del modelo de trabajo, basado
en técnicas de <acronym title="Inteligencia Artificial">IA</acronym>,
que se describe en el texto, viene derivada de la intención de dotar
a dicho modelo de la capacidad de soportar funcionalidades <em>web</em>.
Dado que el resumen del artículo que acabamos de reproducir es suficientemente
claro y expresivo, creo que no cabe añadir nada más al respecto,
salvo recomendar su lectura.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1078186283050270122004-03-02T01:11:00.000+01:002004-03-02T14:38:33.233+01:00Una introducción a Prolog ¿para "Hackers"...?<p>A través de <a href="http://www.pjorge.com/archivo/2004-02-29/17:04:47/">pjorge</a>,
me entero de la reciente publicación de <em><a href="http://www.kuro5hin.org/story/2004/2/25/124713/784" lang="en">A
Prolog Introduction for Hackers</a></em>. De paso la referencia me ha servido
para conocer <a href="http://www.kuro5hin.org/" lang="en">Kuro5hin.org</a>:
"<em>...collaborative site about technology and culture, both separately
and in their interactions.</em>" (<a href="http://www.kuro5hin.org/?op=special;page=mission" lang="en">fuente</a>).</p>
<p>A pesar de lo que el título pueda dar a entender, "<em><a href="http://www.kuro5hin.org/story/2004/2/25/124713/784" lang="en">A
Prolog Introduction...</a></em>" es simplemente una introducción
a este lenguaje, de carácter muy general, por lo que no acabo de entender
que pintan los "hackers" en el asunto... seguramente, como <a href="http://donosti.mundurat.net/mt/2004/02/26/agradecimientos_varios.html">me apuntaba</a>
Ander de <a href="http://donosti.mundurat.net/mt/">Donosti.org</a>,
algo <a href="http://www.bitacoras.org/bit.php?id=43_0_1_0_C">de esto</a>
debe de haber en tan incomprensible mención... De carácter
general y breve, repito, aunque al tiempo de exposición suficientemente clara
y completa, este pequeño tutorial es sin embargo bastante adecuado para quienes apenas conozcan algo (o nada) del lenguaje
Prolog y estén interesados en adquirir unas nociones básicas. Quizás
se hecha en falta una mención más extensa de procedimientos
esenciales como son el corte, la negación, las técnicas recursivas
y de parámetros acumuladores, la utilización de predicados dinámicos, etc.</p>
<p>También son de lectura muy recomendable los numerosos comentarios
suscitados a propósito de este pequeño tutorial (más
de 100 en el momento de escribir estas líneas), destacando especialmente,
a mi modo de ver, el que lleva por título "<a href="http://www.kuro5hin.org/comments/2004/2/25/124713/784/110#110" lang="en">Benefits
of the Prolog mindset...</a>", pero en fin, conviene no perderse ninguno;
muchos de ellos son simples críticas, más o menos fundamentadas,
en torno a los méritos o deméritos del lenguaje Prolog, si
bien en otros casos se trata de aportaciones adicionales, muy pertinentes,
en torno a cuestiones poco o nada tratadas en el tutorial que venimos comentando,
o que simplemente informan de recursos interesantes relacionados con dicho
lenguaje.</p>
<p>A su vez, en los <a href="http://www.pjorge.com/servlet/comentarios/2004-02-29/17:04:47/">comentarios</a>
a la <a href="http://www.pjorge.com/archivo/2004-02-29/17:04:47/">anotación
de pjorge</a>, JJ da una opinión un tanto sorprendente, y a mi juicio
prejuiciosa y equivocada, acerca del lenguaje Prolog, que en cualquier
caso es contestada con gran acierto por Akuma...</p>
<p>En <a href="http://lambda.weblogs.com/" lang="en">Lambda the Ultimate</a>
también <a href="http://lambda.weblogs.com/discuss/msgReader$11368" lang="en">hacen
referencia</a> al tutorial "<em><a href="http://www.kuro5hin.org/story/2004/2/25/124713/784" lang="en">A
Prolog Introduction...</a></em>", e igualmente, en el <a href="http://lambda.weblogs.com/discuss/msgReader$11368" lang="en">apartado
de comentarios</a> se pueden leer opiniones interesantes. Destacar que
<a href="http://www.info.ucl.ac.be/people/cvvanroy.html" lang="en">Peter
Van Roy</a>, en dichos comentarios, hace algunas correcciones a fallos
evidentes contenidos en el texto de la introducción que venimos
comentando.</p>
<p>Finalizamos reseñando varios tutoriales, apuntes e introducciones
al lenguaje Prolog. En algunos casos se trata de ediciones electrónicas
de monografías dedicadas a este lenguaje de programación
lógica. El orden de la mención es aleatorio, no implica ningún
tipo de escala de importancia ni nada parecido:</p>
<h3>En castellano</h3>
<ul>
<li>
<a href="http://delta.cs.cinvestav.mx/~schapa/red/intro_lm/logica1.html">Introducción
a la Lógica Matemática</a> - <a href="http://delta.cs.cinvestav.mx/~schapa/red/logica/logica.html">Lógica
Matemática y Aplicaciones</a> (S. V. Chapa Vergara).</li>
<li>
<a href="http://www28.brinkster.com/oraclelinux/prolog/prolog.html">Introducción
al Prolog</a> (J. Suárez Sanz).</li>
<li>
<a href="http://www.geocities.com/v.iniestra/apuntes/pro_log/index.html">Programación
Lógica</a> (<a href="http://www.geocities.com/v.iniestra/">V. Iniestra</a>).</li>
<li>
<a href="http://www.gsi.dit.upm.es/~gfer/ssii/rcsi/index.html">Representación
del conocimiento en sistemas inteligentes</a> (G. Fernández Fernández).</li>
<li>
<a href="http://www.mor.itesm.mx/~rdec/principal.html">Representación
de Conocimiento</a> (E. Morales, L. E. Sucar).</li>
<li>
<a href="http://proton.ucting.udg.mx/tutorial/prolog/index.htm">Tutorial
de Prolog</a> (traducción parcial del manual del sistema DECsystem-10
Prolog).</li>
<li>
<a href="http://www.programacion.com/tutoriales/prolog/">Tutoriales de
Prolog</a> en <a href="http://www.programacion.com/">Programación
en castellano</a> (A. Fernández Pineda).</li>
<li>
<a href="http://ci.ldc.usb.ve/~borges/ci4645/estilo.html">Guía de
estilo de programación en Prolog</a> (P. R. Borges).</li>
<li>
<a href="http://caminantes.metropoliglobal.com/web/informatica/prolog.htm">Introducción
al Prolog</a>.</li>
<li>
<a href="http://personal5.iddeo.es/wintrmute/ia/proglog.htm">Programación
lógica en Prolog</a> (por Wintermute).</li>
<li>
<a href="http://leibniz.iimas.unam.mx/~euraga/ia/prolog.html">Prolog</a>
(M. Salas Zúñiga, E. Uraga Serratos).</li>
<li>
<a href="http://apolo.us.es/josera/prolog/index.html">Introducción
al Prolog</a> (J. R. Portillo).</li>
</ul>
<h3>En inglés</h3>
<ul>
<li>
<a href="http://www.csc.vill.edu/~dmatusze/resources/prolog/intro_to_prolog/index.html" lang="en">A
Concise Introduction to Prolog</a> (D. Matuszek; <a href="http://www.netaxs.com/people/nerp/prolog/prolog.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.amzi.com/AdventureInProlog/advfrtop.htm" lang="en">Adventure
in Prolog</a> (en <a href="http://www.amzi.com/articles/index.htm" lang="en">Amzi.com</a>).</li>
<li>
<a href="http://www.amzi.com/ExpertSystemsInProlog/index.htm" lang="en">Building
Expert Systems in Prolog</a> (D. Merritt; <a href="http://www.amzi.com/articles/index.htm" lang="en">idem</a>).</li>
<li>
<a href="http://etud.epita.fr/~vigier_n/Prolog/index.htm" lang="en">An
Introduction to Prolog</a> (L. Michel, V. Nicolas).</li>
<li>
<a href="http://www.ugrad.cs.ubc.ca/spider/cs322/Sicstus/sicstus-guide.html" lang="en">An
Introduction to SICStus Prolog</a> (R. Dearden).</li>
<li>
<a href="http://www.cee.hw.ac.uk/~alison/essence/prolog/prolog.html" lang="en">Basics
of Prolog</a> (A. Cawsey).</li>
<li>
<a href="http://kilo.ee.lsu.edu/koppel/ee4785/prolog.html" lang="en">C-Prolog
User's Manual</a> (F. Pereira <em>et al.</em>).</li>
<li>
<a href="http://www.cee.hw.ac.uk/~alison/ai3notes/all.html" lang="en">Databases
and Artificial Intelligence</a> (A. Cawsey).</li>
<li>
<a href="http://pauillac.inria.fr/~diaz/gnu-prolog/manual/index.html" lang="en">GNU-Prolog
Manual</a> (<a href="http://pauillac.inria.fr/~diaz/" lang="en">D. Diaz</a>).</li>
<li>
<a href="http://kti.ms.mff.cuni.cz/~bartak/prolog/" lang="en">Guide to
Prolog Programming</a> (R. Barták).</li>
<li>
<a href="http://www.cs.ncl.ac.uk/modules/1997-98/csc128/ncmh/datatypes/" lang="en">Haskell
and Prolog Datatypes</a> - <a href="http://www.cs.ncl.ac.uk/modules/1997-98/csc324/differences/" lang="en">Haskell/Prolog
Differences</a>.</li>
<li>
<a href="http://www.csse.monash.edu/~lloyd/tildeLogic/Prolog.toy/Ch/" lang="en">Prolog
Introduction</a> (<a href="http://www.csse.monash.edu.au/~lloyd/" lang="en">L.
Allison</a>).</li>
<li>
<a href="http://burks.brighton.ac.uk/burks/language/prolog/pms/pms.htm" lang="en">Introduction
to Prolog for Mathematicians</a> (J. Paine; <a href="http://burks.bton.ac.uk/burks/language/prolog/pms/pms.htm" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.sju.edu/~jhodgson/ugai/prolog.html" lang="en">Introduction
to Prolog</a> (<a href="http://www.sju.edu/~jhodgson/" lang="en">J. Hodgson</a>).</li>
<li>
<a href="http://www.cse.unsw.edu.au/~claude/teaching/AI/notes/prolog/index.html" lang="en">iProlog
Programmer's Manual</a> (<a href="http://www.cse.unsw.edu.au/~claude/teaching/index.html" lang="en">C.
Sammut</a>; <a href="http://www.cse.unsw.edu.au/~cs3411/prolog/doc/index.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.clip.dia.fi.upm.es/~vocal/public_info/index.html" lang="en">Introductory
Course on Constraint Logic Programming</a> (M. Carro <em>et al.</em>).</li>
<li>
<a href="http://www.cosc.canterbury.ac.nz/~wolfgang/cosc302/Chap2.4.html" lang="en">Declarative
Programming: The Prolog Language</a> (<a href="http://www.cosc.canterbury.ac.nz/~wolfgang/" lang="en">W.
Kreutzer</a>).</li>
<li>
<a href="http://www.coli.uni-sb.de/~kris/prolog-course/" lang="en">Learn
Prolog Now!</a> (P. Blackburn <em>et al.</em>).</li>
<li>
<a href="http://lina.es.ncku.edu.tw/eaglesource/AI/Prolog-Tutorial/prolog/starting.html" lang="en">Learning
Prolog</a> (N. Ford).</li>
<li>
<a href="http://web.uvic.ca/~ling48x/ling482/prolog/index.html" lang="en">An
Introduction to Prolog</a> (A. C. Brett).</li>
<li>
<a href="http://www.cs.sfu.ca/CC/SW/Prolog/Tutorials/toc.html" lang="en">Logic
Programming Course</a> (<a href="http://www.cs.sfu.ca/CourseCentral/SW/Prolog/Tutorials/toc.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.generation5.org/articles.asp?Action=List&Topic=Programming" lang="en">Artículos
e introducciones sobre Prolog</a> en <a href="http://www.generation5.org/" lang="en">Generation5</a>.</li>
<li>
<a href="http://www.dontveter.com/basisofai/12.html" lang="en">More Prolog</a>
(D. R. Tveter).</li>
<li>
<a href="http://www.ccs.neu.edu/home/dorai/schelog/schelog.html" lang="en">Programming
in Schelog -embedding of Prolog-style logic programming in Scheme</a> (D.
Sitaram).</li>
<li>
<a href="http://www.cs.sunysb.edu/~warren/xsbbook/book.html" lang="en">Programming
in Tabled Prolog</a> (David S. Warren).</li>
<li>
<a href="http://www.mdx.ac.uk/www/psychology/cog/psy3230/prolog1/00-CONT.HTML" lang="en">Prolog
Basics: A Guide For Beginners</a> (T. Drapkin).</li>
<li>
<a href="http://www.comp.lancs.ac.uk/computing/courses/year2/250/prolog/notes.html" lang="en">Introduction
to Prolog</a> (D. Nichols).</li>
<li>
<a href="http://www.cs.auckland.ac.nz/~j-hamer/07.363/prolog-for-se.html" lang="en">Prolog
for Software Engineering</a> (Peter B. Reintjes).</li>
<li>
<a href="http://cs.wwc.edu/~cs_dept/KU/PR/Prolog.html" lang="en">Prolog
Tutorial</a> (A. Aaby).</li>
<li>
<a href="http://www.cs.bham.ac.uk/~pjh/prolog_course/sem223.html" lang="en">Prolog
and Logic Programming</a> (P. J. Hancox; <a href="http://www.cs.bham.ac.uk/~pjh/prolog_course/sem242.html" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.compapp.dcu.ie/~alex/LOGIC/start.html" lang="en">Prolog
Tutorials</a> (J. Power).</li>
<li>
<a href="http://www.cs.may.ie/~jpower/Courses/PROLOG/" lang="en">Prolog
Tutorials</a> (<a href="http://www.compapp.dcu.ie/~alex/index.html" lang="en">A.
Monaghan</a>).</li>
<li>
<a href="http://www.visual-prolog.com/vip6/tutorial/default.htm" lang="en">Visual
Prolog On-line Tutorials</a>.</li>
<li>
<a href="http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html" lang="en">Prolog
Tutorial</a> (<a href="http://www.csupomona.edu/~jrfisher/www/" lang="en">J.
R. Fisher</a>).</li>
<li>
<a href="http://cblpc0142.leeds.ac.uk/~paul/prologbook/" lang="en">Prolog
Programming A First Course</a> (P. Brna).</li>
<li>
<a href="http://www.dai.ed.ac.uk/groups/ssp/bookpages/quickprolog/quickprolog.html" lang="en">Quick
Prolog</a> (D. S. Robertson).</li>
<li>
<a href="http://www.sics.se/isl/sicstuswww/site/documentation.html" lang="en">SICStus
Prolog User's Manual</a>.</li>
<li>
<a href="http://www.htw-dresden.de/~logic/ai/combinatoric/content.htm" lang="en">Solving
combinatoric problems with Prolog</a>.</li>
<li>
<a href="http://www.cse.unsw.edu.au/~billw/prologdict.html" lang="en">The
Prolog Dictionary</a> (B. Wilson).</li>
<li>
<a href="http://www.trinc-prolog.com/doc/index.htm" lang="en">Trinc-Prolog
Help Index</a>.</li>
<li>
<a href="http://en.wikipedia.org/wiki/Prolog" lang="en">Prolog</a> (en
<a href="http://en.wikipedia.org/" lang="en">Wikipedia</a>).</li>
<li>
<a href="http://www-users.york.ac.uk/~sjh1/courses/L333intro_to_prolog/swi/" lang="en">Using
SWI-Prolog</a> (S. Harlow).</li>
<li>
<a href="http://www.swi.psy.uva.nl/projects/SWI-Prolog/Manual/" lang="en">SWI-Prolog
Reference Manual</a>.</li>
<li>
<a href="http://www.dcs.warwick.ac.uk/~pwg/cs205/cs205index.html" lang="en">Online
Teaching Material - Prolog</a> (P. W. Goldberg).</li>
</ul>
<p>Monografías</p>
<ul>
<li>
<a href="http://spivey.oriel.ox.ac.uk/mike/logic/" lang="en">An Introduction
to Logic Programming through Prolog</a> (J. M. Spivey).</li>
<li>
<a href="http://www.cs.nps.navy.mil/people/faculty/rowe/book/book.html" lang="en">Artificial
Intelligence through Prolog</a> (Neil C. Rowe).</li>
<li>
<a href="http://www.cogs.susx.ac.uk/local/books/nlp-in-prolog/index.html" lang="en">Natural
Language Processing in Prolog</a> (G. Gazdar, C. Mellish; <a href="http://www.cogs.susx.ac.uk/lab/nlp/gazdar/nlp-in-prolog/" lang="en">otra
ubicación</a>).</li>
<li>
<a href="http://www.cogs.susx.ac.uk/local/books/ai-through-search/index.html" lang="en">Artificial
Intelligence Through Search</a> (C. Thorton, B. du Boulay).</li>
<li>
<a href="http://www.cis.upenn.edu/~jean/gbooks/logic.html" lang="en">Logic
for Computer Science: Foundations of Automatic Theorem Proving</a> (J.
Gallier).</li>
<li>
<a href="http://www.ida.liu.se/~ulfni/lpp/" lang="en">Logic, Programming
and Prolog</a> (U. Nilsson, J. Maluszynski).</li>
<li>
<a href="http://www.mtome.com/" lang="en">Prolog and Natural-Language Analysis</a>
(F. C. N. Pereira, S. M. Shieber).</li>
<li>
<a href="http://utenti.lycos.it/parsers/index.htm" lang="en">Prolog Parsers.
Parsing techniques in Prolog</a> (Klaus von Bremen).</li>
<li>
<a href="http://www.cl.cam.ac.uk/Teaching/2001/PrologAI/cae1.pdf" lang="en">Clause
and Effect: Prolog programming for the Working Programmer</a> (W. F. Clocksin;
en <acronym title="Portable Document Format" lang="en">PDF</acronym>;
también en <a href="http://www.cl.cam.ac.uk/Teaching/2001/PrologAI/cae1.ps.gz" lang="en"><acronym title="PostScript" lang="en">PS</acronym></a>).</li>
<li>
<a href="http://www-lp.doc.ic.ac.uk/UserPages/staff/rak/rak.html" lang="en">Logic
for Problem Solving</a> (R. Kowalski).</li>
</ul>
<h3>En otros idiomas</h3>
<ul>
<li>
<a href="http://users.info.unicaen.fr/~nugues/Cours/prolog/prolog.html" lang="fr">La
Programmation Logique et le langage Prolog</a> (P. Nugues).</li>
<li>
<a href="http://www710.univ-lyon1.fr/~csolnon/prolog.html" lang="fr">Introduction
à Prolog</a> (C. Solnon).</li>
<li>
<a href="http://www.ce.unipr.it/research/HYPERPROLOG/manuale.html" lang="it">Manuale
Prolog</a> (G. Adorni <em>et al.</em>).</li>
<li>
<a href="http://www.lambda-systems.com/prolog/meta.htm" lang="fr">Méta
Interpréteurs en Prolog</a> (<a href="http://www.lambda-systems.com/accueil.html" lang="fr">L.
Jean-Michel</a>).</li>
<li>
<a href="http://www.joinville.udesc.br/departamentos/dcc/professores/claudio/prolog/index.html">Tutorial
de Prolog</a> (Claudio Cesar de Sá).</li>
<li>
<a href="http://www.dietmar-schmitt.de/essays/SGI/Prolog/inhalt.html">Zur
Entstehung der Programmiersprache Prolog</a> (<a href="http://www.dietmar-schmitt.de/prolog/index.html">D.
Schmitt</a>).</li>
<li>
<a href="http://ia.ucpel.tche.br/~lpalazzo/Prolog/Pagina/pl03.htm" lang="br">Introdução
à Programação Prolog</a> (Luiz A. M. Palazzo).</li>
</ul>
<p>No se trata en absoluto de un listado completo de todo lo que se puede
localizar en Internet sobre este lenguaje. En inglés, y también
en castellano, se encuentran bastantes apuntes y notas de curso correspondientes a asignaturas universitarias,
por lo general de calidad y profundidad de análisis bastante superiores
a las que encontramos en las introducciones y tutoriales que acabamos de
mencionar, si bien su referencia la dejamos para más adelante.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0tag:blogger.com,1999:blog-5454882.post-1077413813573751352004-02-22T02:36:00.000+01:002004-02-27T20:35:13.576+01:00Un nuevo "blog" y clasificaciones facetadas a propósito de Nedstat<p>Por medio de los "referred" (referidos) de las <a href="http://v1.nedstatbasic.net/stats?ACQ3RA1anuDg6ulEdx4p1aheB5qA">estadísticas</a>,
me entero de la existencia de <a href="http://www.cerezo.name/weblog/" lang="en">Sense
of Wonder</a>, <em>weblog</em> escrito en inglés por David Cerezo,
que la verdad sea dicha tiene muy buena pinta, tanto en la presentación
como en los contenidos, que en definitiva viene a ser lo importante. Problemas
fundamentales de la teoría de la computación, lenguajes de
programación, representación del conocimiento... son, a grandes
rasgos, algunos de los temas tratados de momento, complementados por prometedores
apartados como el que encontramos en la columna de la derecha bajo el epígrafe
"Worth reading documents", selección de documentos relevantes de
temática variada.</p>
<p>Por cierto, y ya que hemos mencionado el sistema de estadísticas,
es muy curiosa y expresiva, muy "semántica", la identificación
que hace <a href="http://www.nedstatbasic.net/" lang="en">Nedstat</a> de
los apartados en que divide la información que ofrece, a saber:
"Aquí y ahora", "Cuándo", "De dónde", "Cómo",
"Con qué"... Sin duda se trata de una <a href="http://www.nosolousabilidad.com/articulos/sistemas_clasificacion.htm" title="Sistemas de Clasificación de Información">forma
de clasificación</a>, de <a href="http://www.nosolousabilidad.com/articulos/clas_facetadas1.htm" title="Clasificaciones Facetadas y Metadatos">organización facetada</a> de la información, que recuerda
a las cinco facetas significativas o fundamentales de la <a href="http://www.slais.ubc.ca/courses/libr517/02-03-wt2/projects/faceted/index.htm" lang="en">Clasificación
Colonada</a> ("Colon Classification") de <a href="http://dmoz.org/Reference/Libraries/Library_and_Information_Science/Librarians/Ranganathan,_S._R./" lang="en">Ranghanatan</a>:
<em>Personalidad</em>, <em>Materia</em>, <em>Energía</em>, <em>Espacio</em>
y <em>Tiempo</em>. Éstas permiten agrupar la información en
"campos semánticos", determinados por una serie de afinidades
y características comunes.</p>
<p>Ranganathan consideraba el mundo como un conjunto de <em>entidades variables</em>,
descomponibles en puntos de vista o <em>facetas</em>, que son los términos
normalizados, utilizados para clasificar las materias, que acabamos de
enumerar:</p>
<ul>
<li>
Personalidad: es el primer orden clasificatorio, el objeto principal de
cada materia y por ello el órden más activo.</li>
<li>
Materia: aspectos, propiedades, cualidades, elementos materiales.</li>
<li>
Energía: acciones, procedimientos, técnicas.</li>
<li>
Espacio: lugar en el que sucede un hecho.</li>
<li>
Tiempo: toda realidad es contemplable desde una localización en
el tiempo.</li>
</ul>
<p>Los sistemas facetados se basan en el análisis y descomposición
de las materias en sus partes componentes, y la unión de esas partes
de acuerdo con el documento que se va a representar. Implican por tanto
un proceso de análisis y de síntesis, que toma en consideración
la individualidad de cada documento, y permite un elevado grado
de autonomía en la toma de decisiones a la hora de clasificarlos.</p>
<p>Podemos destacar las siguientes ventajas de las clasificaciones facetadas:</p>
<ul>
<li>
Las divisiones en facetas constituyen medios originales para canalizar
las materias y los conocimientos.</li>
<li>
Permiten explicar conceptos con mayor precisión que los sistemas
enumerativos (aquellos que listan, relacionan, y enumeran todas las materias
con carácter lineal, dividiendo las disciplinas en clases de niveles
jerárquicos diferenciados, descendiendo en especificidad), a partir
de un número de elementos menor. Las facetas tienen una alta capacidad
combinatoria, partiendo de pocos elementos iniciales.</li>
<li>
Los sistemas facetados se prestan bien a la automatización, ya que
una materia se puede localizar a partir de cada una de las facetas con
las que halla sido descrita, incidiendo de esta forma en ciertos aspectos
de la postcoordinación (en los lenguajes documentales postcoordinados
los términos de la descripción se utilizan libremente, sin
relación a priori entre ellos, estableciéndose esa relación
en el momento de la recuperación del documento).</li>
<li>
Tienen una gran capacidad para integrar nuevos conceptos. Se pueden introducir
modificaciones en una faceta dentro de un área determinada sin que
afecte a las restantes.</li>
</ul>
<p>Sin embargo:</p>
<ul>
<li>
Los sistemas facetados tienen una estructura, para cada materia concreta,
con niveles jerárquicos menos definidos que la equivalente en las
clasificaciones de carácter enumerativo.</li>
<li>
Las notaciones resultantes son a menudo complicadas y difíciles
de memorizar, al estar adaptadas expresamente a cada documento en particular.</li>
<li>
La responsabilidad de las descripciones recae siempre sobre la competencia
del clasificador, mientras que en los sistemas enumerativos ésta
se presenta resuelta en las tablas.</li>
</ul>
<p>En cualquier caso el sistema clasificatorio facetado desarrollado por Ranganathan,
supuso un importante avance teórico, de decisiva influencia en los
posteriores sistemas de clasificación de carácter combinatorio y en los modernos <em>tesauros</em>.</p>etxehttp://www.blogger.com/profile/10987668917577281087noreply@blogger.com0