Vous êtes sur la page 1sur 5

Cours SBC

Pr. Jean Marie Dembele

Prise en main de prolog


1- Installation
(sous linux : gprolog).
(sous windows Installer w32pl666.exe ou w64pl666.exe fourni en
Cours).

2- Premières commandes
Lancer l’application et obtenir le prompt suivant :
1 ?-
Toutes les commandes doivent se terminer par un point. Essayer les
commandes:
– |?- float(1.4).
– |?- float(1).

Une commande est généralement appelée un but ou une requête.


Un programme Prolog est un ensemble de faits ou de règles appelées
clauses
Pour lister les clauses en mémoire taper |?- listing.
– Pour lister les clauses en mémoire qui commencent par le prédicat
“p”
taper |?- listing(p)..
– Pour lister les clauses qui commencent par les prédicats ‘p”, ‘q” ou
‘r”,
taper |?- listing([p,q,r])..
Pour sortir de l’interpréteur, il faut taper ctrl D.

3- Alimenter notre base

Soient les prédicats ou propositions par et grand qui ont les sens
suivants:
– par(X,Y) signifie que X est le parent de Y.
– grand(X,Y) signifie que X est le grand parent de Y.
On peut définir la dernière proposition grand à partir de par de la
manière suivante:
– grand(X, Z) :- par(Y, Z), par(X, Y).

De manière générale :
A :- B, C. signifie : A est vrai si B est vrai et C est vrai Bien retenir
cette commande…
Enregistrer les commandes des lignes suivantes sous le fichier
« entreefamille.pl » (le mettre dans de dossier courant de Prolog (Mes
Documents/Prolog)

par(abdou, souleymane).
par(abdou, codou).
par(ndeye, souleymane).
par(ndeye, codou).
par(fatou, abdou).
par(fama, ndeye).
par(ousmane, abdou).
par(ousseynou, ndeye).
grand(X, Z) :- par(Y, Z), par(X, Y).

Charger ce fichier avec la commande


– ?- [entreefamille].
L’interpréteur répond true pour signaler que le fichier a bien été
interprété.
– Si le fichier n’existe pas (Error source_sink “….” does not exist). Dans
ce cas, il faut vérifier l’existence du fichier dans votre répertoire
courant.
– Si le fichier n’est pas correctement interprété (compilation failed).
Dans ce cas, il faut vérifier le contenu du fichier.

4- Exploiter notre base

Qui sont les enfants de ndeye ?


– ?- par(ndeye,X).

Prolog va parcourir les faits et règles du programme depuis le début


jusqu’`a ce qu’il puisse faire correspondre le but avec un fait. Le
premier pouvant être associé au but est par(ndeye, souleymane) en
identifiant X avec souleymane. L’interpréteur répond :
– X = souleymane
A ce stade on peut taper entrer et Prolog s’arrétera. Cependant si on
tape un point virgule, Prolog va revenir sur ses pas (backtracking ) et
continuer à chercher d’autres associations pour le but par(ndeye, C).
Le but est associé à par(ndeye, codou) en identifiant X avec codou.
L’interpréteur répond :
– X = codou.
et s’arrete, puisqu’il n’y a plus de fils pour ndeye.

5- Tester votre prise en main


Ecrire la commande qui trouve les grands parents de souleymane et
expliquer comment Prolog va procéder.

Soit maintenant la base de faits suivante :


homme(jean). parent(paul,luc).
homme(pierre). parent(pierre,jacques).
homme(jacques). parent(pierre,jean).
homme(paul). parent(leon,lucie).
homme(leon). parent(claire,lucie).
homme(alain). parent(andree,jean).
homme(luc). parent(andree,jacques).
homme(gaston). parent(lucie,paul).
femme(lucie). parent(lucie,alain).
femme(andree). parent(martine,luc).
femme(claire). parent(jacques, anne).
femme(martine). parent(julie, armelle).
femme(julie). parent(jacques, armelle).
femme(armelle). parent(julie, anne).
femme(anne). parent(gaston, andree).
femme(odette). parent(gaston, leon).
parent(jean,paul). parent(odette, andree).
parent(jean,alain). parent(odette, leon).

Ici les prédicats homme(X), femme(X) et parent(X,Y) décrivent


respectivement que “X est un homme”, “X est une femme” et “X est un
parent de Y” (père ou mère).
Questions :
– Dessiner sur une feuille l’arbre généalogique.
– Entrer les faits dans un fichier.
– Ecrire les règles suivantes dans votre programme :
– pere(X,Y) qui traduit ”X est père de Y”
– grand pere(X,Y) qui traduit ”X est grand père de Y”
– mere(X,Y) et grand mere(X,Y)
– frere(X,Y) et soeur(X,Y)
– cousin(X,Y) et cousine(X,Y)
– oncle(X,Y) et tante(X,Y)

Charger le programme dans prolog et trouver les choses suivantes


– Qui est le père d’alain ?
– Qui est le grand père de luc ?
– La liste de tous les pères.
– La liste de tous les grand pères.
– La liste des cousins-cousines.
– Proposer d’autres questions pour vérifier la validité de votre arbre.
5- Pour finir, l’exemple du cours

Charger les règles suivantes en utilisant les clauses de Prolog.

SI X aime la musique classique et les maths ALORS il pourrait aimer


Bach
Si X aime la musique classique et est de tempérament romantique
ALORS il pourrait aimer Schubert.
SI X est de tempérament romantique ALORS il pourrait aimer Cabrel.
SI X écrit des poèmes ALORS il est de tempérament romantique.

Ajouter, comme on l’a vu dans le cours :


aime(jean,musiqueC).
ecritPoemes(jean).

Comment tester le résultat du chainage avant ?


Comment poser la question « Que pourrait aimer Jean » (Jean
pourrait aimer X) au système pour tester le chainage arrière ?

Quelques éléments du langage (source developpez.com/) :


Les commentaires
Les commentaires en Prolog se présentent sous deux formes :
 les commentaires multilignes, comme en C, compris entre /* et */
 les commentaires sur une seule ligne, introduits par le symbole
%

Les variables
Elles sont représentées par un identificateur commençant par une
lettre majuscule (exemple: X, Truc, Liste, ...).
Constantes
Une constante commence toujours par une lettre minuscule (ex: jean,
ndeye, celibataire...)
Prédicats
En Prolog, on ne parle pas de fonction, mais de « prédicat ». Un
prédicat s'organise en « clauses ». Une clause ne retourne pas de
valeur: soit elle s'exécute, soit elle échoue. On affecte les valeurs des
variables passées en paramètres par « unification ». Par convention,
les variables en entrée sont placées à gauche et les variables en sortie
sont placées à droite, mais l'unification peut se faire dans les deux
sens.
Voici un exemple de prédicat (1 clause):
habite(jean, belfort).
Cette clause exprime la phrase « Jean habite à Belfort ».
L'opération:
| ?- habite(jean, Ville).
nous renvoie: Ville = belfort
Les opérateurs en Prolog
Prolog comprend de nombreux opérateurs arithmétiques, parmi lesquels:

+(X) Plus X
-X Moins X
X+Y Addition
X-Y Soustraction
X*Y Produit
X/Y Division (flottant)
X//Y Division entière
X mod Y Modulo (reste de la division entière)
float(X) Entier le plus proche de X compris entre 0 et X
X/\Y ET bit-à-bit
X\/Y OU bit-à-bit
X#Y OU EXCLUSIF bit-à-bit
\(X) Inversion des bits de X (complément à 1)
X<<Y Décalage de Y bits de X vers la gauche
X>>Y Décalage de Y bits de X vers la droite
X=Y Unification
X==Y Egal
X\=Y Différent
X<Y Inférieur
X>Y Supérieur
X=<Y Inférieur ou égal
X>=Y Supérieur ou égal

Vous aimerez peut-être aussi