2
. Commençons par un exemple simple : l’arbre généalogique /* ========= */ /* les faits */ /* ========= */ /* les hommes */ homme(andre). homme(bernard). homme(babar). homme(clement). homme(dudulle). homme(damien). homme(baptiste). homme(cedric). homme(didier). homme(dagobert). /* les femmes */ femme(augustine). femme(becassine). femme(brigitte). femme(chantal). femme(celestine). femme(caroline). femme(charlotte). femme(daniela). femme(dominique). *Veuillez consulter le fichier [Exemples/Fichier11.pl] du CD. /* les relations de parenté */ enfant(bernard,andre). enfant(bernard,augustine). enfant(babar,andre). enfant(babar,augustine). enfant(brigitte,andre). enfant(brigitte,augustine). enfant(clement,bernard). enfant(clement,becassine). enfant(celestine,babar). enfant(caroline,brigitte). enfant(caroline,baptiste). enfant(cedric,brigitte). enfant(cedric,baptiste). enfant(dudulle,clement). enfant(dudulle,chantal). enfant(damien,clement). enfant(damien,chantal). enfant(daniela,clement). enfant(daniela,chantal). enfant(didier,cedric). enfant(didier,charlotte). enfant(dagobert,cedric). enfant(dagobert,charlotte). enfant(dominique,cedric). enfant(dominique,charlotte). /* données générales (règles) */ parent(Y,X) :- enfant(X,Y). pere(X,Y) :- parent(X,Y),homme(X). mere(X,Y) :- parent(X,Y),femme(X). fils(X,Y) :- enfant(X,Y),homme(X). fille(X,Y) :- enfant(X,Y),femme(X). grand_parent(X,Y) :- parent(X,Z),parent(Z,Y). grand_pere(X,Y) :- grand_parent(X,Y),homme(X). grand_mere(X,Y) :- grand_parent(X,Y),femme(X). petit_enfant(X,Y) :- grand_parent(Y,X). petit_fils(X,Y) :- petit_enfant(X,Y),homme(X). petite_fille(X,Y) :- petit_enfant(X,Y),femme(X). frere_ou_soeur(X,Y) :- pere(P,X),pere(P,Y),mere(M,X),mere(M,Y),X\==Y. frere(X,Y) :- frere_ou_soeur(X,Y),homme(X). soeur(X,Y) :- frere_ou_soeur(X,Y),femme(X). oncle_ou_tante(X,Y) :- parent(Z,Y),frere_ou_soeur(X,Z). oncle(X,Y) :- oncle_ou_tante(X,Y),homme(X). tante(X,Y) :- oncle_ou_tante(X,Y),femme(X). cousin_ou_cousine(X,Y) :- oncle_ou_tante(Z,X),enfant(Y,Z). cousin(X,Y) :- cousin_ou_cousine(X,Y),homme(X). cousine(X,Y) :- cousin_ou_cousine(X,Y),femme(X). ancetre(X,Y) :- parent(X,Y). ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y).

8 arbre généalogique

Embed Size (px)

Citation preview

Page 1: 8 arbre généalogique

. Commençons par un exemple simple : l’arbre généalogique

/* ========= */ /* les faits */ /* ========= */ /* les hommes */ homme(andre). homme(bernard). homme(babar). homme(clement). homme(dudulle). homme(damien). homme(baptiste). homme(cedric). homme(didier). homme(dagobert). /* les femmes */ femme(augustine). femme(becassine). femme(brigitte). femme(chantal). femme(celestine). femme(caroline). femme(charlotte). femme(daniela). femme(dominique).

*Veuillez consulter le fichier [Exemples/Fichier11.pl] du CD.

/* les relations de parenté */ enfant(bernard,andre). enfant(bernard,augustine). enfant(babar,andre). enfant(babar,augustine). enfant(brigitte,andre). enfant(brigitte,augustine). enfant(clement,bernard). enfant(clement,becassine). enfant(celestine,babar). enfant(caroline,brigitte). enfant(caroline,baptiste). enfant(cedric,brigitte). enfant(cedric,baptiste). enfant(dudulle,clement). enfant(dudulle,chantal). enfant(damien,clement). enfant(damien,chantal). enfant(daniela,clement). enfant(daniela,chantal). enfant(didier,cedric). enfant(didier,charlotte). enfant(dagobert,cedric). enfant(dagobert,charlotte). enfant(dominique,cedric). enfant(dominique,charlotte).

/* données générales (règles) */ parent(Y,X) :- enfant(X,Y). pere(X,Y) :- parent(X,Y),homme(X). mere(X,Y) :- parent(X,Y),femme(X). fils(X,Y) :- enfant(X,Y),homme(X). fille(X,Y) :- enfant(X,Y),femme(X). grand_parent(X,Y) :- parent(X,Z),parent(Z,Y). grand_pere(X,Y) :- grand_parent(X,Y),homme(X). grand_mere(X,Y) :- grand_parent(X,Y),femme(X). petit_enfant(X,Y) :- grand_parent(Y,X). petit_fils(X,Y) :- petit_enfant(X,Y),homme(X). petite_fille(X,Y) :- petit_enfant(X,Y),femme(X).

frere_ou_soeur(X,Y) :- pere(P,X),pere(P,Y),mere(M,X),mere(M,Y),X\==Y. frere(X,Y) :- frere_ou_soeur(X,Y),homme(X). soeur(X,Y) :- frere_ou_soeur(X,Y),femme(X). oncle_ou_tante(X,Y) :- parent(Z,Y),frere_ou_soeur(X,Z). oncle(X,Y) :- oncle_ou_tante(X,Y),homme(X). tante(X,Y) :- oncle_ou_tante(X,Y),femme(X). cousin_ou_cousine(X,Y) :- oncle_ou_tante(Z,X),enfant(Y,Z). cousin(X,Y) :- cousin_ou_cousine(X,Y),homme(X). cousine(X,Y) :- cousin_ou_cousine(X,Y),femme(X). ancetre(X,Y) :- parent(X,Y). ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y).

Page 2: 8 arbre généalogique

Exemples de requêtes ?- homme(andre). Yes ?- femme(andre). No ?- enfant(bernard,andre). Yes ?- enfant(bernard,caroline). No ?- enfant(X,babar). X = celestine Yes ?- enfant(celestine,X). X = babar Yes ?- enfant(daniela,X). X = clement ; X = chantal ; No ?- enfant(X,Y). X = bernard Y = andre ; X = bernard Y = augustine ; X = babar Y = andre ; etc... No ?- homme(X),femme(X). No

?- homme(X),femme(Y). X = andre Y = augustine ; X = andre Y = becassine ; X = andre Y = brigitte ; etc... (on obtient tous les couples possibles et pas uniquement ceux qui ont eu un enfant ensemble) No ?- homme(X), femme(Y), enfant(Z,X), enfant(Z,Y). X = andre Y = augustine Z = bernard ; X = andre Y = augustine Z = babar ; X = andre Y = augustine Z = brigitte ; etc... No ?- pere(P,dagobert). P = cedric . ?- soeur(S,P),pere(P,dagobert). S = caroline, P = cedric . ?- mere(M,C),cousin(C,P),pere(P,dagobert). M = becassine, C = clement, P = cedric .