Un programa en Prolog se compone principalmente de hechos, reglas y consultas, organizados como cláusulas terminadas en punto. Estos elementos forman la base de conocimiento y permiten que el intérprete deduzca respuestas mediante el mecanismo de unificación y backtracking.
Recordemos los componentes de un programa Prolog:
- Hechos: Definen relaciones básicas entre objetos.
- Reglas: Expresan implicaciones lógicas: un hecho depende de otros.
- Consultas: Son las preguntas que el usuario hace al intérprete.
- Variables: Representan objetos desconocidos que Prolog intentará instanciar.
En la entrega anterior nos enfocamos en los hechos. Ahora veremos las relaciones.
Observemos el siguiente programa (con hechos poliádicos, representación más descriptiva, contrario a los monoádicos, representaciones más simples).
parientes.pl
% Hechos poliádicos padre(juan, maria). padre(juan, pedro). padre(pedro, ana). % Regla abuelo(X, Y) :- padre(X, Z), padre(Z, Y).
Consulta:
?- [parientes]. ?- abuelo(juan, Quien).
Salida:
Quien = ana
Aquí se establece la relación padre-hijo:
- Juan es padre de María.
- Juan es padre de Pedro.
- Pedro es padre de Ana.
Por lo que el Abuelo de Ana es Juan. La consulta activa el motor lógico para encontrar coincidencias y construir la relación abuelo-nieto.
Tenemos entonces que: cada hecho es una relación binaria entre dos individuos.
Miremos ejemplos de hechos poliádicos, donde enmarcamos las relaciones entre los objetos.
relaciones.pl
% Hechos poliádicos es_un_objeto(libro, papel) % El libro es un objeto y está hecho de papel es_un_objeto(tenedor, plata) % El tenedor es un objeto y está hecho de plata es_un_animal(gato, felino) % El gato es un animal y es un felino es_un_animal(tiburon, acuatio) % El tiburón es un animal y es acuático
Ahora crearemos algunas reglas para realizar consultas.
Consulta para saber si es un objeto:
% Consulta es_objeto(X) :- es_un_objeto(X, _).
Consulta para saber si es un animal:
% Consulta es_animal(X) :- es_un_animal(X, _).
Consulta para saber el material de qué esta hecho:
% Consulta material_de(X, M) :- es_un_objeto(X, M).
Consulta para saber la clasificación:
% Consulta clasificacion_de(X, C) :- es_un_animal(X, C).
Consulta para saber si son del mismo tipo:
% Consultas mismo_tipo(X, Y) :- es_un_objeto(X, _), es_un_objeto(Y, _). mismo_tipo(X, Y) :- es_un_animal(X, _), es_un_animal(Y, _).
Consulta para saber a qué categoría ptertenece:
% Consultas categoria(X, objeto) :- es_un_objeto(X, _). categoria(X, animal) :- es_un_animal(X, _).
Consultamos:
$ swipl ?- [relaciones]. ?- es_objeto(libro). true. ?- es_animal(gato). true. ?- material_de(tenedor, M). M = plata. ?- clasificacion_de(tiburon, C). C = acuatio. ?- mismo_tipo(gato, tiburon). true. ?- mismo_tipo(libro, gato). false. ?- categoria(libro, C). C = objeto. ?- categoria(gato, C). C = animal.
Continuaremos en próximas entregas.
Enlaces:
https://ferestrepoca.github.io/paradigmas-de-programacion/proglogica/tutoriales/prolog-gh-pages/index.htmlhttps://www.tutorialspoint.com/prolog/prolog_relations.htm
https://virtual.cuautitlan.unam.mx/intar/?page_id=235

Comentarios
Publicar un comentario