Académique Documents
Professionnel Documents
Culture Documents
Utilisation de l’interpréteur
Dans ce TP, nous allons utiliser SWI Prolog, une distribution libre et gratuite du langage de programmation
Prolog.
Les programmes sont dans des fichiers avec le suffixe « .pl ». Le prompt "?-" indique que l'interpréteur attend
une requête de votre part. Toute requête doit se terminer par un point "." et un retour charriot. Lorsqu'une
requête occupe plusieurs lignes, le prompt devient "|".
On utilise la suite des commandes suivantes pour interagir avec l’interpréteur Prolog :
1. Pour compiler et charger un programme:
?- consult(nom_du_fichier).
2. Pour exécuter les requêtes (questions).:
?- une_question_ici.
3. L’affichage du contenu du fichier chargé se fait par :
?- listing.
4. L’affichage d’une clause particulière, ici père, se fait par :
?- listing(père).
5. On quitte Prolog avec
?- halt.
Exercice 2 :
Un ensemble de faits est le programme le plus simple que nous pouvons écrire en Prolog. Voici un exemple
de programme :
homme(nacer).
homme(amine).
homme(fadi).
Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 1
3SI TP1 : Premiers pas avec prolog IA
femme(amel).
femme(amani).
femme(acil).
pere(fadi,nacer).
pere(amine,nacer).
pere(acil,fadi).
mere(asma,amel).
mere(amani,amel).
mere(fadi,amel).
mere(amel,khadra).
1. Editer cette base de fait en Prolog et compiler le programme (compile-make).
2. Ici, nous utilisons la convention où l’entité représentée par le second argument est le père de celle
exprimée par le premier argument. Exécuter en donnant votre remarque sur les résultats les requêtes
suivantes pour vérifier :
Si amel est une femme :
?- femme(amel).
Si nacer est le père de amine
?- pere(nacer, amine).
3. Donner les résultats obtenus par cette requête en tapant le retour chariot après le premier résultat. Ré-
exécuter la même requête mais en tapant un ; après le résultat. Que déduisez-vous ?
?- homme(X).
Exercice 3 :
Soit le programme Prolog suivant :
situe_dans(curitiba,parana).
situe_dans(florianopolis,santa_catarina).
situe_dans(joinville,santa_catarina).
situe_dans(montreal,quebec).
situe_dans(X,bresil):- situe_dans(X,parana).
situe_dans(X,bresil):- situe_dans(X,santa_catarina).
situe_dans(X,canada):- situe_dans(X,quebec).
situe_dans(X,amerique):- situe_dans(X,bresil).
situe_dans(X,amerique):- situe_dans(X,canada).
1. Editer cette base de fait en Prolog et compiler le programme (compile-make).
2. Quelle est la réponse aux requêtes suivantes ? (S'il y en a plus d'une, donnez-les toutes) justifier du point
de vue Prolog les résultats obtenus !!
?- situe_dans(florianopolis,santa_catarina).
?- situe_dans(florianopolis,parana).
?- situe_dans(X,santa_catarina).
?- situe_dans(curitiba,X).
?- situe_dans(X,Y).
3. Quelle est la réponse à la requête suivante ?
situe_dans(santa_catarina,bresil)? Pourquoi ?
Exercice 4 :
Dans des activités de peinture et coloriage les enfants ont utilisé différents outils de coloriage:
abdelhay a utilisé des crayons.
amine a utilisé de la peinture à l’eau.
lina a utilisé des pastels.
meryem a utilisé des crayons.
abdellah a utilisé des pastels.
lamar a utilisé des pastels.
batol a utilisé des crayons
adberahim a utilisé de la peinture à l’eau.
amir a utilisé de la peinture à l’eau.
1. Formuler la base de connaissances équivalente.
2. Quelle sont les questions à poser pour connaître : (1) si lina a utilisé des crayons ou non, (2) si abdelhay
a utilisé des pastels ou non, (3) si batol a utilisé des crayons ou non.
3. Poser les questions permettant de connaitre : (1) qui a utilisé les crayons, (2) qui a utilisé les pastels, (3)
les outils utilisés par lina.
Exercice 5 :
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.
Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 2
3SI TP1 : Premiers pas avec prolog IA
Exercice 7:
1. Saisir la BF suivante sous Prolog:
entree(artichauts).
entree(avocat).
viande(grillade).
viande(poulet).
poisson(dorade).
poisson(rouget).
dessert(melon).
dessert(fraise).
2. Définir le prédicat "plat(P)" dont le sens est le suivant :
"P est un plat si P est une viande ou si P est un poisson".