Vous êtes sur la page 1sur 2

INFO2 – IG - Université Paris-Nord

TP1 de prolog 2009-2010

Utilisation de Swi-Prolog sous Unix


Choisissez votre éditeur préféré pour créer un fichier avec une extension .pl dans lequel
vous écrirez votre programme (par exemple tp1.pl). Attention à ne pas utiliser de
majuscule pour la première lettre du nom du fichier.
Placez-vous dans le répertoire où figure votre fichier puis lancez Prolog grâce à la
commande pl.
Chargez votre programme grâce à l’instruction [tp1]. À chaque modification du
programme, n’oubliez pas d’enregistrer et de recharger le fichier dans Prolog.
1. Arbre généalogique
1.1.Déclarations
Définissez la famille ci-dessous dans l’éditeur. Attention à ne pas mettre de
majuscules aux prénoms ni aux prédicats. N’oubliez pas les points.
homme(albert). femme(simone). pere(jean,simone).
homme(jean). femme(marie). pere(louis,benoit).
homme(paul). femme(sophie). mere(germaine,jean).
homme(bertrand). mere(christiane,simone).
homme(louis). pere(albert,jean). mere(christiane,paul).
homme(benoit). pere(jean,paul). mere(simone,benoit).
femme(germaine). pere(paul,bertrand). mere(marie,bertrand).
femme(christiane). pere(paul,sophie). mere(marie,sophie).

1.2.Questions 1.3.Définition de prédicats

Traduire les questions suivantes en Définir les prédicats suivants :


Prolog et vérifier les réponses : • parent(X,Y) : X est un parent de Y, pere
Est-ce que Paul est un homme ? ou
Est-ce que Benoit est une femme ? mere ;
Qui est une femme ? • fils(X,Y) : X est le fils de Y ;
Qui est un homme ? • fille(X,Y) : X est la fille de Y ;
Est-ce que Marie est la mère de Sophie ? • grand_pere(X,Y) : X est le grand-père
de de Y ;
Benoit ? • grand_mere(X,Y) : X est la grand-mère
Qui est la mère de Jean ? de Y ;
Quels sont les enfants de Paul ? • frere(X,Y) : X est le frère de Y ;
Quels sont les hommes qui sont pères ? • soeur(X,Y) : X est la soeur de Y.

2. Traduction d’énoncés
Traduire en Prolog l'énoncé suivant :
Marie aime le vin
Pierre est un voleur
Pierre aime tous ceux qui aiment le vin
Si quelqu'un est un voleur et aime quelque chose alors il le vole
Qui vole quoi?
Corrigé

/*************** TP1 ****************/


homme(albert). femme(simone). pere(louis,benoit).
homme(jean). femme(marie). mere(germaine,jean).
homme(paul). femme(sophie). mere(christiane,simone).
homme(bertrand). pere(albert,jean). mere(christiane,paul).
homme(louis). pere(jean,paul). mere(simone,benoit).
homme(benoit). pere(paul,bertrand). mere(marie,bertrand).
femme(germaine). pere(paul,sophie). mere(marie,sophie).
femme(christiane). pere(jean,simone).

/* Questions a poser dans Prolog :


?- homme(paul). X = jean ; ?- pere(paul,X).
Yes X = paul ; X = bertrand ;
?- femme(benoit). X = bertrand ; X = sophie ;
No X = louis ; No
?- femme(X). X = benoit ; ?- homme(X),pere(X,_).
X = germaine ; No X = albert ;
X = christiane ; ?- mere(marie,sophie). X = jean ;
X = simone ; Yes X = jean ;
X = marie ; ?- mere(marie,benoit). X = paul ;
X = sophie ; No X = paul ;
No ?- mere(X,jean). X = louis ;
?- homme(X). X = germaine ; No
X = albert ; No */

/* X est un parent de Y, pere ou mere */ /* X est le fils de Y */


parent(X,Y) :- mere(X,Y). fils(X,Y) :- mere(Y,X),homme(X).
parent(X,Y) :- pere(X,Y). fils(X,Y) :- pere(Y,X),homme(X).
/* X est la fille de Y */ /* X est le grand-pere de Y */
fille(X,Y) :- mere(Y,X),femme(X). grand-pere(X,Y) :- parent(P,Y), pere(X,P).
fille(X,Y) :- pere(Y,X),femme(X). /* X est la grand-mere de Y */
grand-mere(X,Y) :- parent(P,Y), mere(X,P).

/* X est le frere de Y */
frere(X,Y) :- homme(X), pere(P,X), pere(P,Y), mere(M,X), mere(M,Y), X \== Y.
/* X est la soeur de Y */
soeur(X,Y) :- femme(X), pere(P,X), pere(P,Y), mere(M,X), mere(M,Y), X \== Y.

/* Traduction d'enonces */
aime(marie,vin).
aime(pierre,X) :- aime(X,vin).
vole(X,Y) :- voleur(X), aime(X,Y).
voleur(pierre).
/* vole(X,Y) donne X=pierre et Y=marie */

Vous aimerez peut-être aussi