Hoy les comparto un ejemplo de un programa en prolog, basado en el siguiente árbol genealógico:

Si apenas se van iniciando en prolog lo mejor sera que visiten esta introducción a prolog.
Lo primero que debemos hacer es generar nuestros hechos o lo que nuestro programa sabe, y en lo que se basara para dar respuestas a nuestras consultas.
Iniciaremos por indicarle el genero de cada uno de los integrantes de nuestro árbol genealógico como se muestra a continuación:
hombre(arthur).
hombre(bill).
hombre(louis).
hombre(teddy).
hombre(percy).
hombre(george).
hombre(fred).
hombre(harry).
hombre(james).
hombre(albus).
hombre(ron).
hombre(hugo).
mujer(molly).
mujer(fleur).
mujer(victoire).
mujer(dominique).
mujer(audrey).
mujer(lucy).
mujer(molly).
mujer(angelina).
mujer(roxanne).
mujer(ginny).
mujer(lily).
mujer(hermione).
mujer(rose).
Una vez hecho lo anterior, es momento de indicarle quien es padre de quien, quien es el «progenitor» de alguien mas, como se muestra a continuación:
progenitor(molly,bill).
progenitor(molly,percy).
progenitor(molly,george).
progenitor(molly,ginny).
progenitor(molly,ron).
progenitor(arthur,bill).
progenitor(arthur,percy).
progenitor(arthur,george).
progenitor(arthur,ginny).
progenitor(arthur,ron).
progenitor(bill,victoire).
progenitor(bill,dominique).
progenitor(bill,louis).
progenitor(fleur,victoire).
progenitor(fleur,dominique).
progenitor(fleur,louis).
progenitor(percy,lucy).
progenitor(percy,molly).
progenitor(audrey,lucy).
progenitor(audrey,molly).
progenitor(george,fred).
progenitor(george,roxanne).
progenitor(angelina,fred).
progenitor(angelina,roxanne).
progenitor(ginny,james).
progenitor(ginny,lily).
progenitor(ginny,albus).
progenitor(harry,james).
progenitor(harry,lily).
progenitor(harry,albus).
progenitor(ron,hugo).
progenitor(ron,rose).
progenitor(hermione,hugo).
progenitor(hermione,rose).
Y por ultimo es necesario indicarle quien es pareja de quien:
pareja(arthur,molly).
pareja(molly,arthur).
pareja(bill,fleur).
pareja(fleur,bill).
pareja(percy,audrey).
pareja(audrey,percy).
pareja(george,angelina).
pareja(angelina,george).
pareja(ginny,harry).
pareja(harry,ginny).
pareja(ron,hermione).
pareja(hermione,ron).
pareja(victoire,teddy).
pareja(teddy,victoire).
Una ves que concluimos con lo hechos, es momento de generar las reglas que debe tener nuestro programa:
padre(X,Y):-hombre(X),progenitor(X,Y).
madre(X,Y):-mujer(X),progenitor(X,Y).
hermanos(X,Y):-progenitor(Z,X),progenitor(Z,Y), not(X==Y).
hermano(X,Y):-hombre(X),hermanos(X,Y).
hermana(X,Y):-mujer(X),hermanos(X,Y).
esposo(X,Y):-pareja(X,Y),hombre(X).
esposa(X,Y):-pareja(X,Y),mujer(X).
suegro(X,Y):-padre(X,Z),pareja(Y,Z).
suegra(X,Y):-madre(X,Z),esposos(Y,Z).
yerno(X,Y):-suegro(Y,X);suegra(Y,X),hombre(X).
nuera(X,Y):-suegro(Y,X);suegra(Y,X),mujer(X).
cuñados(X,Y):-((pareja(X,Z),hermanos(Z,Y));(pareja(Y,Z),hermanos(Z,X))).
cuñado(X,Y):-cuñados(X,Y),hombre(X).
cuñada(X,Y):-cuñados(X,Y),mujer(X).
abuelo(X,Y):-progenitor(Z,Y),padre(X,Z).
abuela(X,Y):-progenitor(Z,Y),madre(X,Z).
nieto(X,Y):-progenitor(Y,Z),progenitor(Z,X),hombre(X).
nieta(X,Y):-progenitor(Y,Z),progenitor(Z,X),mujer(X).
tio(X,Y):-progenitor(Z,Y),(hermano(X,Z);cuñado(X,Z)).
tia(X,Y):-progenitor(Z,Y),(hermana(X,Z);cuñada(X,Z)).
primo(X,Y):-progenitor(Z,X),progenitor(W,Y),hermanos(Z,W),hombre(X).
prima(X,Y):-progenitor(Z,X),progenitor(W,Y),hermanos(Z,W),mujer(X).
En las reglas anteriores esta definida cada una de las relaciones posibles que se pueden llegar a dar en el árbol genealógico que les comparto.
Y ahora estamos listos para realizar consultas a nuestro programa:
Espero y este ejemplo les sea de utilidad, cualquier cosa no duden en comentarla y de antemano muchas gracias.
Tu arbol genealogico esta ma xD
Me gustaMe gusta
Especificamente que parte esta mal?
Me gustaMe gusta
En que victoire, no es progenitora de teddy, de ahi en mas esta bien xD
Me gustaMe gusta
ya lei un poquito hacerca de vitoire y teddy 😀 ahorita lo corrijo, muchas gracias.
Me gustaMe gusta
Disculpa, en las reglas de hermanos, hermana, hermano, tia, tio, se repiten 2 veces las repuesta q da xP
Me gustaMe gusta
Gracias por el dato n.n lo checo y lo corrijo 😀
Me gustaMe gusta