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.
|