lunes, 21 de julio de 2014

SWI_Prolog / Arbol Genealogico




Este es un ejemplo de como se hace  un árbol genealógico de la familia en "SWI Prolog" que se descarga directamente desde internet. este programa  es muy funcional para hacer consultas solo agregando relaciones o hechos en los cuales para el árbol solo se utilizan hechos  padre a hijo.

el signo de % significa un comentario
el singo de , significa conjunción
el singo de . significa disyunción
los signos :- significan condicional

-los hecho se definen de la siguiente manera:

padre(Silvio,laura)  % se lee Silvio es el padre de laura
madre(elvira,lisbe)  % se lee elvira es el madre de lisbe

y asi sucesivamente todos los hechos padre e hijoo madre e hijo.

-las condiciones se definen de la siguiente manera:

hermanos(X,Y) :-  padre(Z,X), padre(Z,Y). % se lee X es hermano de Y si Z es el padre de X y Z es el padre de Y
abuelos(X,Z):- padre(X,A),padre(A,Z). % se lee X es abuelo de Z  si X es padre de A y A es padre de Z

-para las consultas después de tener los hechos en relación padres e hijos se hace de la siguiente manera:

?- hermanos(Andres,laura). % se escribe tal cual, los nombres pueden variar!
?- tios(ruben,daniela). % se escribe tal cual, los nombres pueden variar!

Un ejemplo de como se hacen los hechos y las condiciones basados en el árbol genealógico:

madre(lisbe,laura).
madre(lisbe,alejandra).
madre(lisbe,daniela).
madre(lisbe,andres).
padre(silvio,laura).
padre(silvio,alejandra).
padre(silvio,daniela).
padre(silvio,andres).
padre(francisco,silvio).
padre(francisco,jesus).
padre(francisco,rosalva).
padre(francisco,nelsy).
madre(erlinda,silvio).
madre(erlinda,jesus).
madre(erlinda,rosalva).
madre(erlinda,nelsy).
madre(nelsy,tatiana).
madre(nelsy,miguel).
madre(rosalva,natalia).
madre(rosalva,diego).
padre(luis,lisbe).
padre(luis,johanna).
padre(luis,brigithe).
padre(luis,hsneider).
madre(elvira,lisbe).
madre(elvira,johanna).
madre(elvira,brigithe).
madre(elvira,hsneider).
madre(johanna,carlos).
madre(brigithe,nicole).
madre(hsneider,steven).
diferente(X,Y):- X\=Y.
hermanos(X,Y):- madre(W,X),madre(W,Y),diferente(X,Y).
hermanos(X,Y):- padre(P,X),padre(P,Y),diferente(X,Y).
tios(X,Y):- padre(Z,Y),hermanos(X,Z).
tios(X,Y):- madre(Z,Y),hermanos(X,Z).
abuelos(X,Z):- padre(X,A),madre(A,Z).
abuelos(X,Z):- madre(X,B),madre(B,Z).
abuelos(X,Z):- madre(X,C),padre(C,Z).
abuelos(X,Z):- padre(X,D),padre(D,Z).
sobrinos(X,Y):- padre(W,X),hermanos(W,Y).
sobrinos(X,Y):- madre(P,X),hermanos(P,Y).
primos(X,Y):-  padre(W,X),padre(Z,Y),hermanos(Z,W).
primos(X,Y):-  padre(W,X),madre(Z,Y),hermanos(Z,W).
primos(X,Y):-  madre(W,X),madre(Z,Y),hermanos(Z,W).
primos(X,Y):-  madre(W,X),padre(Z,Y),hermanos(Z,W).
nietos(Z,X):- padre(X,A),madre(A,Z).
nietos(Z,X):- madre(X,B),madre(B,Z).
nietos(Z,X):- madre(X,C),padre(C,Z).
nietos(Z,X):- padre(X,D),padre(D,Z).

?- hermanos(andres,alejandra).
true

?- abuelo(luis,nicole).
true

?- tios(ruben,steven).
false

?- primos(laura,natalia).
true 

No hay comentarios.:

Publicar un comentario