Solutions du TP1
1- Saisir les faits donnés sur un fichier texte tel que bloc-notes ou sur l’éditeur de
Prolog.
2- La définition de nouveaux prédicats se fait à l’aide des prédicats déjà définis dans la
base de faits.
pere(X,Y) :- homme(X), parent(X, Y).
grand-pere(X,Y) :- homme(X), parent(X, Z), parent(Z, Y).
mere(X,Y) :- femme(X), parent(X, Y).
grand-mere(X,Y) :- femme(X), parent(X, Z), parent(Z,Y).
frere(X,Y) :- homme(X), parent(Z, X), parent(Z, Y).
soeur(X,Y) :- femme(X), parent(Z, X), parent(Z, Y).
cousin(X, Y) :- homme(X), grand-père(Z, X), grand-père(Z, Y).
cousin(X, Y) :- homme(X), grand-mere(Z, X), grand-mere(Z, Y).
cousine(X, Y) :- femme(X), grand-pere(Z, X), grand-pere(Z, Y).
cousin(X, Y) :- femme(X), grand-mere(Z, X), grand-mere(Z, Y).
oncle(X,Y) : homme(X), parent(Z, Y), frere(Z, X).
tante(X, Y) :- femme(X), parent(Z, Y), sœur(Z, X).
Cette solution n’est pas unique.
Pour chacun des prédicats précédents vous pouvez poser différentes questions pour
vérifier la sémantique de ces prédicats.
3- a. Qui est le père de tarek ?
?- pere(X, tarek).
b. Qui est le grand père de farid ?
?- grand-pere(X, farid).
c. La liste de tous les pères. (on utilise la variable anonyme ‘_’ puisque on ne veut pas
afficher la valeur du deuxième argument).
?- pere(X, _).
d. La liste de tous les grands-pères.
?- grand-pere(X, _).
e. La liste des cousins-cousines.
?- cousin(X, _).
?-cousine(X, _).
4- Pour modifier un programme en ajoutant ou en retranchant des clauses( faits ou règles)
au cour d’exécution, il suffit d’utiliser le mot clé « dynamic».
a. Dans le programme : « :- dynamic prédicat/nb arguments » par exemple :
:-dynamic ancetre/2. Dans Prolog : ?- dynamic ancetre/2.
b. Au cours de l’exécution : ?- assert(ancetre(X,Y) :- parent(X,Y)). De cette façon
nous avons ajouté une nouvelle clause.
c. On veut supprimer par exemple un fait : parent(nadia, farid). On procéde comme
suit : ?- retract(parent(nadia, farid)).
d. On veut supprimer la clause correspondante au prédicat « mere » :
?-retract(mere(X,Y) :-feminin(X), parent(X,Y)).