Prolog es uno de los mejores lenguajes de programación para hacer inferencias lógicas. Básicamente, definimos hechos y reglas, los cuales podrían describirse formalmente como axiomas y teoremas. Así, podemos definir un hecho: ama(juan, maría). Lo cual se lee juan ama a maría. Cabe decir que si pongo ama(maría, juan)., lo que leería es maría ama a juan, lo cual no es lo mismo que en el hecho anterior. Aquí el orden de los parámetros si es significativo, al menos para quien programa este tipo de problemas en Prolog.

Hay en cambio reglas, las cuales se analizan conforme a los hechos, pero que en esencia, generalizan una situación. Por ejemplo, cuando se quiere saber quién es hermano de quién. En Prolog escribiríamos:

hermanos(X,Y) :- padre(X,Z), padre(Y,Z), X=\=Y.

Lo cual se lee en español: X y Y son hermanos si el padre de X es Z, el padre de Y es también ese mismo Z y X y Y no son la misma persona.

Podemos pues, hacer en Prolog este tipo de reglas que muestren las relaciones de una familia. Lo simpático es que estas definiciones de las reglas pueden llevar a casos por demás curiosos. Considérese el siguiente texto:

Junto al cadáver de un suicida se encontró una carta explicatoria diciendo:

‘No se culpe a nadie de mi muerte. Me quito la vida porque dos días más que viviese sería mucho martirio: Tuve la desgracia de casarme con una viuda. Esta tenía una hija. De haberlo sabido, nunca me hubiera casado con ella.

Mi padre, para mayor desgracia, era viudo y se enamoró y se casó con la hija de mi mujer. De manera que mi mujer era suegra de su suegro.. Mi hijastra se convirtió en mi madrastra y mi padre al mismo tiempo ¡¡¡era mi yerno!!!

Al poco tiempo, mi madrastra trajo al mundo una niña que era mi hermana, y a la vez era nieta de mi mujer, de manera que yo era abuelo de mi hermana!

Después, mi mujer trajo al mundo un niño que, como era hermano de mi madrastra, era cuñado de mi padre, nieto de su hermana ¡¡¡y mi tío!!!

Mi mujer era nuera de su hija, yo soy en cambio padrastro de mi madrastra, y mi padre y su mujer son mis hijastros, mi hijo es mi bisnieto y tío de su tía. Además, ¡¡¡yo soy mi propio abuelo!!!

ME DESPIDO DE ESTE MUNDO, PORQUE NO SE QUIÉN DEMONIOS SOY

El ejercicio que entonces planteamos es: escríbase un programa en Prolog que pueda contestar de forma afirmativa a todas las cosas que dice el suicida. Por ejemplo, ¿Es cierto que él mismo puede ser su propio abuelo? ¿Acaso su hijastra podría ser considerada su madrastra? etcétera. El programa debe contestar a cada consulta con «yes», porque todos los hechos planteados por el suicida son ciertos.

Quien sea el primero en mandarme a morsa@la-morsa.com su programa en SWI-Prolog y que, evidentemente, sea correcto, se ganará una taza de la Morsa. El concurso solamente aplica para quienes vivan en la República Mexicana.