Programando en Prolog: Hechos

Prolog es un lenguaje de programación declarativo, basado en las matemáticas y la lógica.

Se basa en la lógica de primer orden. El cual es un sistema formal utilizado en matemáticas, lógica e informática para expresar y razonar sobre relaciones y propiedades de una manera clara y estructurada.

Este lenguaje es muy útil para resolver problemas que involucran objetos y relaciones.

"Un programa en Prolog responde preguntas sobre el tema del cual tiene conocimiento".

Prolog se basa en éstos tres mecanismos:

  • Unificación. 
  • Estructuras de datos basadas en árboles. 
  • Backtracking automático.

Crear un programa en Prolog consiste en:

  1. Establecer hechos sobre objetos y sus relaciones.
  2. Hacer preguntas sobre (esos) objetos y sus relaciones.
  3. Definir reglas sobre objetos y sus relaciones.

Hechos en Prolog

En palabras simples, los hechos son afirmaciones sobre el mundo que se consideran verdaderas.

Por ejemplo:

  • Mi mamá es prima de la hija de su tía
  • Laura es hermana de Juana
  • Oscar es profesor de matemáticas
  • Los coreanos hablan coreano.

Sintaxis de los hechos:

Se escriben como un nombre de predicado (relación) seguido de cero o más argumentos entre paréntesis y finalizando con un punto (.). Los nombres de las relaciones y argumentos que se refieren a objetos siempre comienzan con minúscula.

predicado(argumento1, argumento2).

Veamos un ejemplo.

profesor(juana, mateo).

Donde:

profesor es el nombre de la relación o nombre del predicado

y

juana y mateo son los argumentos

Si lo leyeramos como humanos diríamos que: "Juana es profesor(a) de Mateo".

Tomando en cuenta esto, entonces un hecho es información proporcionada a la base de datos de Prolog. Y ésta infomación Prolog la puede "aprender".

Observemos otros ejemplos.

son_primos(mariana, hortencia).
da_premio(karen, puntualidad, antonio).
no_tiene(jacobo, auto).
es_animal(gato).

Leyendo esto como humanos diríamos que:

"Mariana y Hortencia son primo(a)s".

"Karen da premio de puntualidad a Antonio".

"Jacobo no tiene auto".

"El gato es un animal".

Algo que nos pudiera confundir es lo que es un hecho y una relación.

Un hecho es: información que proporcionamos a Prolog. Como:

es_animal(gato).

"El gato es un animal".

Un hecho no depende de condiciones o de cálculos.

Simplemente se declaran.

Una relación es: es el nombre que decidimos ponerle. Como:

son_primos(mariana, hortencia).

"Mariana y Hortencia son primo(a)s".

Las relaciones son hechos que conectan dos o más entidades, mostrando como están vinculadas.

Es importante hacer notar que: un conjunto de hechos, junto con un conjunto de reglas, conforman una base de datos en Prolog.

En Prolog, las reglas es una forma de deducir relaciones nuevas a partir de hechos ya conocidos.

Hecho, relación y regla

1. Tomemos el hecho declarado de "El gato es un animal".

es_animal(gato).

2. Creamos una relación:

come(gato, raton).

"El gato come ratón".

También puede ser algo como esto:

amigo(gato, perro).
amigo(perro, gato).

"El gato es amigo del perro".

"El perro es amigo del ratón".

3. Ahora definamos una regla:

% X es depredador si X come ratón
es_depredador(X) :- come(X, raton)

El programa completo puede ser:

gatos.pl

% --- Hechos ---
es_animal(gato).
es_animal(perro).
es_animal(raton).

come(gato, raton).
come(perro, hueso).

% --- Relaciones ---
amigo(perro, gato).
amigo(gato, perro).

% --- Reglas ---
% X es depredador si X come ratón
es_depredador(X) :- come(X, raton).

Las consultas serían las siguientes:

?- es_animal(gato).
true.

?- come(gato, raton).
true.

?- es_depredador(gato).
true.

?- es_depredador(perro).
false.

Hemos visto lo que es un hecho en Prolog. Continuaremos sobre los conceptos de este lenguaje en próximas entregas.

Enlaces:

https://virtual.cuautitlan.unam.mx/intar/?page_id=235


Comentarios