Bonjour à tous,
J'ai réalisé mon tout premier programme en Prolog.
Je m'amuse en Prolog vu que je n'avais touché à la programmation "logique".
Mais subsiste un problème lors des questions que je pose à mon programme.
Voilà tout d'abord mon programme, simple comme bonjour:
En clair, c'est ma situation familiale, j'ai (Thibaut) une soeur et un frère: Quentin et Florence et mes parents s'appellent Jean-Pierre et Brigitte.Code:%Prédicats homme(thibaut). homme(quentin). homme(jeanpierre). femme(florence). femme(brigitte). parents(jeanpierre, brigitte, thibaut). parents(jeanpierre, brigitte, florence). parents(jeanpierre, brigitte, quentin). %Règles %%parents père(Père, Enfant) :- parents(Père, Mère, Enfant), homme(Père), Père\=Mère, Père\=Enfant, Mère\=Enfant. mère(Mère, Enfant) :- parents(Père, Mère, Enfant), femme(Mère), Père\=Mère, Père\=Enfant, Mère\=Enfant. parent(Parent, Enfant) :- (parents(Parent, X, Enfant) | parents(X, Parent, Enfant)), Parent\=Enfant, Parent\=X, Enfant\=X. %%enfants fils(Fils, Parent) :- parent(Parent, Fils), homme(Fils), Fils\=Parent. fille(Fille, Parent) :- parent(Parent, Fille), femme(Fille), Fille\=Parent. enfant(Enfant, Parent) :- parent(Parent, Enfant), Enfant\=Parent. %%liens entre enfants frère(X, Y) :- fils(X, Parent), enfant(Y, Parent), X\=Y, X\=Parent, Y\=Parent. soeur(X, Y) :- fille(X, Parent), enfant(Y, Parent), X\=Y, X\=Parent, Y\=Parent. frère_ou_soeur(X, Y) :- enfant(X, Parent), enfant(Y, Parent), X\=Y, X\=Parent, Y\=Parent.
Les codes:
père renvoie vrai s'il existe un prédicat de la forme parents(Père, X, Enfant) et que père est un homme, mère renvoie vrai s'il existe un prédicat de la forme parents(X, Mère, Enfant) et que mère est une femme, parent renvoie vrai s'il existe un prédicat de la forme (Parent, X, Enfant) ou (X, Parent, Enfant), on s'en fiche du sexe.
Les enfants et les liens entre les enfants découle d'eux-mêmes.
Lors de mes questions, j'ai posé les questions suivantes:
Voilà, je ne connais pas encore toutes les substilités de Prolog, donc, l'erreur est sûrement bête mais je ne sais pas d'où elle sort.Code:?- parent(X, thibaut). //Qui sont mes parents? X = jeanpierre ; X = brigitte. ?- enfant(X, brigitte). //Qui sont les enfants de Brigitte? X = thibaut ; X = florence ; X = quentin. ?- fils(X, brigitte). //Qui sont les fils de Brigitte? X = thibaut ; X = quentin. ?- fille(X, brigitte). //Qui sont les filles de Brigitte? X = florence ; false. //ce false, je ne sais pas d'où il vient et il m'embête. ?- frère(X, florence). //Qui sont les frères de Florence? X = thibaut ; X = quentin ; X = thibaut ; X = quentin. //et c'est ici que ça coince... pourquoi, j'ai deux fois Thibaut et Quentin?
Merci,
Aenonis (Thibaut)
-----