Indice Lección 1 Lección 2 Lección 3 Lección 4 Lección 5

Guía de Ejercicios en Prolog

Lección 2

Utiliza la siguiente base de datos (un extracto de un árbol genealógico) para construir los predicados y contestar las preguntas que aparecen a continuación .


%%
% File : family.pl
% Part of a family tree expressed in Prolog.
%%
%%
% File : family.pl
% Part of a family tree expressed in Prolog.
%%

male(michael).
male(charles_gordon).
male(jim).
male(elmo).
male(greg).
male(peter).

female(cathy).
female(sharon).
female(julie).
female(melody).
female(crystal).
female(stephanie).
female(danielle).
female(hazel).
female(eleanor).
female(maria).



father(michael, cathy).
father(michael, sharon).
father(charles_gordon, michael).
father(charles_gordon, julie).
father(charles, charles_gordon).
father(jim, melody).
father(jim, crystal).
father(elmo, jim).
father(greg, stephanie).
father(greg, peter).
father(greg, maria).
father(greg, danielle).

mother(melody, cathy).
mother(melody, sharon).
mother(hazel, michael).
mother(hazel, julie).
mother(eleanor, melody).
mother(eleanor, crystal).
mother(crystal, stephanie).
mother(crystal, peter).
mother(crystal, maria).
mother(crystal, danielle).

parent(X, Y) :- father(X, Y).
parent(X, Y) :- mother(X, Y).
              

1.- Cuáles son los hijos de Michael? Indica la consulta.

2.- Construye el predicado grandfather(X, Y) que es verdadero si X es abuelo de Y. Además, incluya la consulta análoga grandmother(X, Y) y grandparent(X, Y).

3.- Prueba las consultas


?- write(hola).
?- write(hola), write(mundo).
?- write(hola), nl, write(mundo).
?- write(X).
      

y observa los

resultados. ¿Qué significa el último resultado arrojado?

4.- Prueba las consultas


?- father(X, Y).
?- father(X, _).
?- father(X, _), write(X), nl.
?- father(X, _), write(X), nl, fail.

      

y trata de explicar los resultados obtenidos. Ten en mente que el predicado fail siempre falla, por lo que Prolog se ve obligado a realizar el Backtracking.

5.- Construye el predicado sister(X, Y) que es verdadero si X es hermana de Y, brother(X, Y) que es verdadero si X es hermano de Y, y sibling(X, Y) que es verdadero si X es hermano o hermana de Y. Ojo que brother(michael, michael) es falso. ¿Quienés son los hermanos/as de Michael? ¿Y de Danielle?

6.- Prueba las consultas:


?- mother(hazel, X).
?- \+ mother(hazel, X).
?- mother(anacleta, _).
?- \+ mother(anacleta, _).
        

 

El functor \+ realiza una negación por fallo. Explica a qué se deben los resultados obtenidos.

7.- Prueba las consultas:


?- juan == juan.
?- juan = juan.
?- juan == X.
?- juan = X.
?- juan == miguel.
?- \+ juan == miguel.

       

El functor \+ realiza una negación por fallo. Explica a qué se deben los resultados obtenidos.

8.- Escribe un predicado only_child(X) que es verdadero si X es hijo/hija único.