0% ont trouvé ce document utile (0 vote)
88 vues5 pages

Introduction à Prolog pour Débutants

Le document décrit une introduction à Prolog en plusieurs étapes: installation, premières commandes, alimentation de la base de connaissances, exploitation de la base, tests. Il présente également quelques éléments du langage Prolog.

Transféré par

Samba Tounsi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
88 vues5 pages

Introduction à Prolog pour Débutants

Le document décrit une introduction à Prolog en plusieurs étapes: installation, premières commandes, alimentation de la base de connaissances, exploitation de la base, tests. Il présente également quelques éléments du langage Prolog.

Transféré par

Samba Tounsi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Cours SBC

Pr. Jean Marie Dembele

Prise en main de prolog


1- Installation
(sous linux : gprolog).
(sous windows Installer [Link] ou [Link] 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
« [Link] » (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 [Link]/) :


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