Vous êtes sur la page 1sur 4

3SI TP1 : Premiers pas avec prolog IA

TP N° 1 : Premiers pas avec Prolog


Objectif de TP
Ce premier TP permet aux étudiants de : (1) se familiariser avec l’environnement de programmation SWI Prolog, (2)
apprendre les concepts de base de Prolog, la syntaxe et l’arithmétique sous Prolog. Il constitué le point de démarrage pour
programmer en Prolog et pour réaliser des systèmes experts par la suite. Il faut toujours consulter le guide pratique de
Prolog pour comprendre le contenu de TP.

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.

Un exemple simple pour commencer


1. Editer (Filenew) l’exemple suivant sous Prolog et sauvegarder le sous le nom test.pl
/* règle qui exprime que "tous les hommes sont mortels"
autrement dit : pour tout X X est mortel si X est un homme*/ Commentaire sur plusieurs lignes
mortel(X) :- homme(X).
% "tous les philosophes sont des hommes" Commentaire sur une seule ligne
homme(X) :- philosophe(X).
% Mohamed est un homme
homme(mohamed).
% fait qui exprime que ‘Socrate est un philosophe’
philosophe(socrate).
% fait qui exprime que Rex est un chien !
chien(rex).

2. Exécuter les requêtes suivantes :


 ?- chien(milou) : pour verifier que rex est un chien.
 ?- mortel(mohamed) : pour verifier si mohamed est mortel.
 ?- mortel(ali) : pour verifier si ali est mortel.
3. Quelles sont les réponses aux requêtes suivantes ? concluez-vous…
- ?- chien(socrate).
- ?- chien(amine).
- ?- souris(rex).
4. Cherchez tous les atomes qui satisfont le prédicat mortel avec la requête : ?- mortel(X).
 Vous pouvez arrêter la recherche des solutions suivantes avec "Entrée", et demander d'autres
solutions avec ‘ ; ’ ou ‘espace’ jusqu’à l’échec (false) ou la présence d’un point.
 Donner votre conclusion concernant cette requête.

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

homme(hafsi). femme(fatima). pere(abdelhak,hiba).


homme(mohamed). femme(nakhla). pere(mohamed,amel).
homme(abdelhak). femme(amel). pere(nacer,fadi).
homme(abderahman). femme(halima). mere(fatima,mohamed).
homme(nacer). femme(hiba). mere(nakhla,amel).
homme(fadi). pere(hafsi,mohamed). mere(nakhla,abdelhak).
pere(mohamed,abdelhak). mere(amel,fadi).
pere(abdelhak,abderrahman). mere(halima,abderrahman).
mere(halima,hiba).

1. Tracer l’arbre représentée par la base de connaissance précédente ;


2. Traduire les questions suivantes en Prolog et vérifier les réponses :
1. Est-ce que abdelhak est un homme ?
2. Est-ce que fadi est une femme ?
3. Qui est une femme ?
4. Qui est un homme ?
5. Est-ce que halima est la mère de hiba ? de fadi ?
6. Qui est la mère de mohamed ?
7. Quels sont les enfants de abdelhak ?
8. Quels sont les hommes qui sont pères ?

3. Définir les prédicats suivants :


1. parent(X,Y) : X est un parent de Y, père ou mère ;
2. fils(X,Y) : X est le fils de Y ;
3. fille(X,Y) : X est la fille de Y ;
4. grand_pere(X,Y) : X est le grand-père de Y ;
5. grand_mere(X,Y) : X est la grand-mère de Y ;
6. frere(X,Y) : X est le frère de Y ;
7. soeur(X,Y) : X est la soeur de Y.
4. Afficher les enfants de mohamed, les fils de mohamed, les filles de mohamed, le grand_pere de
abderahman, grand_mere de hiba, la mere et le père de fadi.
Exercice 6 :
Soit l’arbre généalogique dans la Figure 1.
1. Décrire la structure de la famille représenté par l’arbre de la Figure 1 (autrement dit, donnez la base de
faits équivalente). En ne considérant que des relations père(x,y) et mere(x,y) .
2. On désire complétez notre programme en définissant de nouvelles relations :
 Grand_pere(X, Y) : X est le grand pere de Y
 ancetre(X, Y) : X est un ancêtre de Y
 fratrie(X,Y) : X et frère ou sœur de Y
 oncle(X, Y) : X est l’oncle de Y
nakhla mohamed
 tante(X,Y) : X est la tante de Y

nassima rabah fatiha ammar omar

souhila fawzi hichem meryem ali

amine mouncef silia


nada amir

jana ahmed rana


Figure 1. Arbre généalogique
3. Exécuter les relations proposées dans la question 3 et utiliser la commande trace pour tracer le chemin
de résolution de Prolog. On cas d’erreur corriger vos règles !!

Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 3


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".

Question : liste de tous les plats ?


3. Définir le prédicat "repas(E,P,D)" dont le sens est le suivant :
" (E,P,D) est un repas si E est une entree, P un plat, et D un dessert".

Questions : liste des repas dont le plat est un poisson ?


liste de tous les repas possibles ?
4. Ajouter les valeurs énergétiques des plats sous forme de faits Prolog :
calories(artichauts,150).
calories(avocat,180).
calories(grillade,250).
calories(poulet,200).
calories(dorade,150).
calories(rouget,130).
calories(fraise,100).
calories(melon,200).

Questions : valeur calorique de chaque entree ?

5. Définir le prédicat "valeur(E,P,D,V)" dont le sens est le suivant :


" V est la valeur énergétique du repas (E,P,D)".

Questions : valeur énergétique des repas dont le plat est un poisson ?


6. Définir le prédicat "repas_equilibre (E,P,D)" dont le sens est le suivant :
" le repas (E,P,D) est équilibré si sa valeur énergétique est inférieure
à 500.
Questions : liste de tous les repas équilibrés ?
repas équilibrés contenant du poisson ?

Dr. Ouarda ZEDADRA (zedadra.ouarda@univ-guelma.dz) 4

Vous aimerez peut-être aussi