Vous êtes sur la page 1sur 6

[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

TP1 : INITIATION A LA PROGRAMMATION


LOGIQUE (PROLOG)

I. Introduction

Prolog est un langage de programmation déclaratif permettant de résoudre des problèmes logiques.
Le nom Prolog est l'acronyme de PROgrammation LOGique. Le principe de la programmation
logique est de décrire l'énoncé d'un problème par un ensemble d'expressions et de liens logiques au
lieu de définir pas à pas la succession d'instructions que doit exécuter l'ordinateur pour résoudre la
problématique.

II. Installation de Prolog

Plusieurs implémentations de Prolog existent, aussi bien sous Windows que sous Linux. Parmi elle
il y a SWI-Prolog qui est un interpréteur Prolog gratuit et disponible aussi bien sous Windows que
sous Linux. (Site : https://www.swi-prolog.org/).

III. Premier programme pour tester l'interpréteur Prolog

Contrairement aux langages de programmation impératifs (comme le Pascal, le langage C, le Java,


Perl, Ruby, Python, etc.) on ne trouvera pas de boucles For, de test If, de "fonctions", etc. dans
Prolog.
Bien que la tradition veuille que le premier programme de test affiche "Bonjour" à l'écran, pour une
fois nous allons faire autre chose.
▪ Créer un nouveau fichier nommé « toto.pl »
▪ Voici le code source en Prolog de ce premier programme qui se contente de déclarer un
ensemble de faits :
▪ animal(chien).
▪ animal(chat).
▪ prenom(paul).
▪ prenom(pierre).
▪ prenom(jean).
▪ Voici les faits affirmés par notre programme :
▪ chien et chat sont des animaux
ISSATM | 1
[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

▪ paul, pierre et jean sont des prénoms


▪ Ouvrons le programme source toto.pl dans l'interpréteur Prolog : consult(toto).

Remarques :
▪ par défaut Prolog attend l'extension .pl pour les fichiers source en Prolog (ce qui peut parfois
prêter à confusion avec les fichiers en Perl ...)
▪ l'extension .pl n'est pas indiquée dans l'instruction consult
▪ nous remarquons déjà qu'en Prolog chaque ligne finit par un point

Nous n'allons pas maintenant "exécuter" le programme, mais nous allons poser à l'interpréteur
Prolog un ensemble de questions pour lesquelles l'interpréteur consultera les faits et les règles
inscrits dans le programme.

➔ Première question : jean est-il un prénom ?


?- prenom(jean).
L'interpréteur nous répond true : jean est bien un prénom dans la base des faits inscrits dans le
programme.
➔ Deuxième question : vincent est-il un prénom ?
?- prenom(vincent).
L'interpréteur nous répond false : vincent n'est pas un prénom dans la base des faits inscrits dans le
programme.
➔ Autre question : quels sont tous les animaux ?
?- animal(X).
La variable X va prendre pour valeur chaque nom d'animal. Pour passer d'une valeur à une autre il
faut appuyer sur la touche point-virgule. Une fois que la liste est terminée, Prolog le fini par un
point. Le résultat est alors :
X = chien;
X = chat.
➔ Autre question : quels sont tous les prenoms ?
?- prenom(X).

Cette fois la variable X va prendre pour valeur chaque prénom. Le point-virgule permet toujours de
passer d'une réponse à la suivante. Le résultat final est alors :
X = paul;
ISSATM | 2
[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

X = pierre;
X = jean.
➔ Autre question : existe-t-il des animaux ?
?- animal(_).
Cette fois l'expression animal(_) sera vraie chaque fois que Prolog rencontre un animal (peut
importe lequel) dans la base des faits du programme. Comme Prolog rencontre 2 animaux, la
réponse à notre question est :
true ;
true.
La commande listing permet d'afficher le code source de la base de faits du programme courant :
?- listing.
Enfin, la commande halt permet de sortir de l'interpréteur Prolog :
?- halt.

IV. Arbre généalogique

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

2) Questions

Traduire les questions suivantes en Prolog et vérifier les réponses :

▪ Est-ce que Paul est un homme ?


▪ Est-ce que Benoit est une femme ?
▪ Qui est une femme ?
▪ Qui est un homme ?

ISSATM | 3
[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

▪ Est-ce que Marie est la mère de Sophie ?


▪ Qui est la mère de Jean ?
▪ Quels sont les enfants de Paul ?
▪ Quels sont les hommes qui sont pères ?
3) Définition de prédicats

Définir les prédicats suivants :

▪ parent(X,Y) : X est un parent de Y, père ou mère ;

▪ fils(X,Y) : X est le fils de Y ;

▪ fille(X,Y) : X est la fille de Y ;

▪ grand_pere(X,Y) : X est le grand-père de Y ;

▪ grand_mere(X,Y) : X est la grand-mère de Y ;

▪ frere(X,Y) : X est le frère de Y ;

▪ soeur(X,Y) : X est la soeur de Y.

V. Traduction d’énoncés

1) Traduire en Prolog l'énoncé suivant :

• Marie aime la fraise

• Pierre est un voleur

• Pierre aime tous ceux qui aiment la fraise

• Si quelqu'un est un voleur et aime quelque chose alors il le vole

• Qui vole quoi ?

ISSATM | 4
[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

VI. Applications :

1) Créez un fichier app2.pl sur le bureau où vous allez saisir les faits el les règles du
programme suivant:

Soit le programme suivant :

homme(ali).
homme(omar).
homme(said).
femme(céline).
femme(lila).
pere(said, ali).
pere(omar, ali).
mere(omar, céline).
mere(said, céline).

parents(X,M,P) :- mere(X, M), pere(X, P).


frere(X,Y) :-homme(Y), parents(X,M,P), parents(Y,M,P).

Questions :

1) Est-ce-que said et omar sont frères ?

2) Est-ce-que lila et ali sont les parents de said ?

3) Quels sont les enfants de céline ?

4) Quels sont les enfants de ali ?

5) Citez tous les hommes ?

6) Citez toutes les femmes ?

7) Qui est le père de omar ?

8) Qui est la mère said ?

ISSATM | 5
[INTELLIGENCE ARTIFICIELLE & MACHINE LEARNING] 2023/2024

2)

Ali s'est marié avec Amel et ont donné naissance à un garçon Said et une fille
Meriem. Said s'est marié avec Yasmine et ont deux filles Lina et Sarra. Meriem quant
à elle s'est mariée avec Youcef.

On souhaite décrire cette famille en Prolog. On utilisera les prédicats suivants :


- male(X) pour signifier que X est de sexe masculin
- femelle(X) pour signifier que Y est de sexe féminin
- enfant(X, Y) pour signifier que X est enfant de Y
- mari(X, Y) pour signifier que X est le mari de Y.

a- Décrire la famille de Ali en définissant un ensemble de faits utilisant les prédicats précédents.
b- Définir le prédicat femme(X, Y) qui signifie que X est la femme de Y.
c- Ecrire les questions suivantes en prolog et donner leurs réponses respectives :
d. Qui est la femme de Youcef ?
e. Qui est le mari de Amel ?

f. Définir le prédicat garçon(X, Y) qui spécifie que X est un enfant de Y de sexe mâle.

3) Saluer en fonction de l’heure

Écrire un programme en Prolog qui salue les gens en fonction de l'heure de la


journée. Voici un exemple de règle simple pour cela :

saluer(X, Bonjour) :- heure(X, Heure),Heure >= 0, Heure < 12, Bonjour = 'Bonjour, '.
saluer(X, Bonsoir) :- heure(X, Heure),Heure >= 12,Heure < 18, Bonsoir = 'Bonsoir, '.
saluer(X, BonneNuit) :-heure(X, Heure),(Heure >= 18; Heure < 0),BonneNuit = 'Bonne nuit, '.
heure(john, 8).
heure(emily, 15).
heure(sarah,21).

Exécutez le programme avec différents exemples.


ISSATM | 6

Vous aimerez peut-être aussi