miércoles, 23 de enero de 2008

Rama Familiar en Lenguaje Prolog (Hermano, Primo, Nieto..)

Dados un conjunto de hechos de la forma padre(nombre1,nombre2), donde nombre1 es el padre de nombre2:

* padre(antonio,juan).
* padre(antonio,carlos).
* padre(juan,diana).
* padre(juan,elena).
* padre(carlos,felipe).

Defina los siguientes predicados:

* hermano(X,Y) el cual es válido si X e Y son hermanos/as.
* primo(X,Y) el cual es válido si X e Y son primos.
* nieto(X,Y) el cual es válido si X es nieto/a de Y.
* descendiente(X,Y) el cual es verdadero si X es descendiente de Y.


/*A)hermano(X,Y) verdadero si X es hemano/a de Y. Hijos de igual madre y padre.*/
hermano(X,Y):-padre(A,X), padre(A,Y), not(X=Y).

/*B)primo(X,Y) verdadero si X es primo de Y.*/
primo(X,Y):-hermano(A,B), padre(A,X), padre(B,Y), not(X=Y).

/*C)nieto(X,Y) verdadero si X es nieto de Y.*/
nieto(X,Y):-padre(Y,A), padre(A,X), not(X=Y).

/*D)descendiente(X,Y) verdadero si X es descendiente de Y.*/
descendiente(X,Y):-padre(Y,X).
descendiente(X,Y):-nieto(Y,X).