Programando en Prolog: reglas y consultas

En las entregas anteriores vimos sobre los hechos y relaciones. Continuaremos ahora con las reglas y, por ende, de las consultas.

En Prolog, las reglas y consultas son el corazón del razonamiento lógico. Los hechos son la base, pero las reglas permiten deducir nueva información y las consultas son la forma de interactuar con el sistema.

Una regla tiene la forma:

cabeza :- cuerpo.
  • La cabeza es lo que queremos demostrar.
  • El cuerpo son condiciones que deben cumplirse (hechos o sub‑consultas).

Tomemos en cuenta este programa.

objetos.pl

% Hechos monoádicos, hechos simples
objeto(cuchara).
objeto(lapiz).
objeto(puerta).
objeto(libros).
objeto(tenedor).

% Hechos poliádicos, establecen cierta relación
es_un_objeto(cuchara, metal).
es_un_objeto(lapiz, madera).
es_un_objeto(puerta, madera).
es_un_objeto(libros, papel).
es_un_objeto(tenedor, metal).

categoria(cuchara, utensilio).
categoria(lapiz, escolar).
categoria(puerta, mueble).
categoria(libros, escolar).
categoria(tenedor, utensilio).

En este programa hemos establecido ciertos hechos simples y con relaciones. Ahora estableceremos algunas reglas, las cuales son las relaciones o clasificaciones derivadas de hechos. Tenemos entonces:

objetos.pl

% Hechos monoádicos, hechos simples
objeto(cuchara).
objeto(lapiz).
objeto(puerta).
objeto(libros).
objeto(tenedor).

% Hechos poliádicos, establecen cierta relación
es_un_objeto(cuchara, metal).
es_un_objeto(lapiz, madera).
es_un_objeto(puerta, madera).
es_un_objeto(libros, papel).
es_un_objeto(tenedor, metal).

categoria(cuchara, utensilio).
categoria(lapiz, escolar).
categoria(puerta, mueble).
categoria(libros, escolar).
categoria(tenedor, utensilio).


% Reglas
es_utensilio(X) :- objeto(X), (X = cuchara; X = tenedor).
es_escolar(X) :- objeto(X), (X = lapiz; X = libros).
es_mueble(X) :- objeto(X), X = puerta.

Para ejecutar las consultas (definidas en las reglas) debemos cargar el programa.

$ swipl
1 ?- [objetos].
true.

2 ?- es_mueble(X).
X = puerta ;
false.

3 ?- es_mueble(X).
X = puerta .

3 ?- es_utensilio(cuchara).
true .

4 ?- es_escolar(libro).
false.

5 ?- es_escolar(libros).
true.

Resumiendo:

  • Hechos: datos básicos (ej. objeto(cuchara).). 
  • Reglas: relaciones o clasificaciones derivadas de hechos. 
  • Consultas: preguntas que exploran hechos y reglas, con posibilidad de obtener múltiples soluciones gracias al backtracking.

Enlaces:

https://ferestrepoca.github.io/paradigmas-de-programacion/proglogica/tutoriales/prolog-gh-pages/index.html
https://virtual.cuautitlan.unam.mx/intar/?page_id=218

Comentarios