Vous êtes sur la page 1sur 13

PROLOG

Introduction
PRÉSENTATION DU LANGAGE
 Le langage PROLOG (PROgrammation en LOGique) fut introduit en 1972 par
Alain COLMERAUER. Ce langage permet d'écrire des programmes sous une
forme très proche de la logique des prédicats du premier ordre. 
C'est un langage : 
 déclaratif (contrairement aux langages impératifs comme Java, C++, Python,
etc.)  : il permet de déclarer des connaissances, sans expliciter leur traitement  ; 
 indéterministe : il permet le traitement de problèmes comportant plusieurs
solutions. 
Dans un programme PROLOG, on retrouve toujours : 
 Des connaissances, décrivant des faits, regroupés dans une base de faits (BF), 

 Des règles applicables aux faits, regroupés dans une base de règles (BR). 

 BF + BR = BC (Base de connaissances) 

 Un moteur d'inference (M.I.) intégré dans le langage, qui permet d'appliquer"


les règles aux faits
LA PROGRAMMATION LOGIQUE EN
QUELQUES DATES
 1930 : Jaques HERBRAND achève sa théorie sur le calcul des prédicats. 
 1970 : R. KOWALSKI et A. COLMERAUER utilisent la logique comme
language de programmation. 
 1972 : Le premier interprète PROLOG voit le jour à L'Université de
Marseille, grâce à P. ROUSSEL et A. COLMERAUER. 1977 : Le premier
compilateur PROLOG apparaît à l'Université d'EDIMBURG, fruit du travail
de D.H.D. WARREN. 
 avec R. KOWALSKI, un embryon d'un tel système, et c'est ainsi que fut
développé l'outil PROLOG.
LA PROGRAMMATION LOGIQUE EN
QUELQUES DATES
 Revenons sur la naissance de PROLOG. En France, en 1970, A.
COLMERAUER se prend d'intérêt pour la façon de faire des déductions
sur des textes. Étudiant alors le travail de R. KOWALSKI sur les méthodes
de résolution, il s'en servit de base comme premier modèle théorique de
PROLOG. Mais son but n'était pas de créer un nouveau langage de
programmation. Il voulait pouvoir décrire, en français, un univers à
l'ordinateur afin que celui-ci puisse répondre à des questions sur cet
univers. Ils firent alors, avec R. KOWALSKI, un embryon d'un tel système,
et c'est ainsi que fut développé l'outil PROLOG.
 P. ROUSSEL, de son côté, se servit du modèle de A. COLMERAUER et
avec l'aide de confrères d'EDIMBURG, il conçut le premier interprète, qui
fut codé, par la suite, en FORTRAN. 
 Le PROLOG est un langage de programmation logique basé sur deux
grands mécanismes: le chaînage arrière et l'unification.
PRÉLIMINAIRES

 Le symbole « = » en PROLOG signifie l'unification et pas


l'affectation. Pour affecter une valeur numérique à une
variable, en évaluant mathématiquement le résultat, il faut
utiliser « is ». Par exemple:
?- M=1+1, N is 1+1.
M = 1+1
N=2;

?- N is 1+1, M is N+3, P = N+M.


N=2
M=5
P = 1+1+5 ;
PRÉLIMINAIRES
 REMARQUE : Il existe quelques actions prédéfinies comme
write(), qui est applicable à une constante, une variable ou une
chaîne de caractères entre guillemets simples, nl (passage à la
ligne). Par exemple :

?- write('bonjour‘),nl, write('toi'). bonjour


toi

?- X is 2, write(X).
2
X=2
PRÉLIMINAIRES
REMARQUE : En PROLOG, on ne définit pas de fonction ou
de procédures mais des prédicats (à valeur dans {0 , 1}), ,
éventuellement avec 0 argument.
Donc : Pour faire l'équivalent d'une procédure, on dit qu'un
certain prédicat est vrai à condition qu'un certain nombre
d'actions soient faites, par exemple :

affiche :- write('bonjour').
PRÉLIMINAIRES
 Pour définir une fonction f(X1,...,Xn)=Y, on definit un prédicat
P(X1,X2,...,Xn,Y) qui est vrai si f(X1,...,Xn)=Y, par exemple:

a_pour_successeur(X,Y) :- Y is X+1.

A. Comment exprimer qu’on veut calculer la somme de


deux nombres
somme(X,Y,S) :- S is X+Y.

B. Comment exprimer qu’on veut connaitre le plus grand


parmi deux nombres?
PRÉLIMINAIRES

max2(X,Y,X) :- X>=Y.
max2(X,Y,Y) :- X<Y.

Que produit max2(X,1,3) et pourquoi?


Meme question pour max2(1,X,3)
QUELQUES PRÉDICATS PRÉDÉFINIS DE
SWI-PROLOG
 Edition et chargement de programmes:

 Comparaison de termes:
RÉCURSIVITÉ
 Remarque: En prolog, il n’ya pas d’autre moyens de faire
des boucles que d’utiliser la récursivité.
Exemple: . Afficher N fois 'bonjour'. (Ou : ecrit(N) est vrai si le
message 'bonjour' est écrit N fois.)

ecrit(0).
ecrit(N) :- N>0, write('bonjour'), nl, N1 is N-1 ecrit(N1).
LES LISTES
Parallèle avec d'autres langages de programmation. Les tableaux
en PROLOG sont des listes. Contrairement à la plupart des
langages de programmation, les indices des éléments ne sont pas
disponibles. En revanche, une liste est un terme composé en
particulier de symbole de fonction ‘.’ et d'arité 2: le premier
argument est l'élément de tête de la liste, et le deuxième
argument est la queue de la liste. La liste vide est notée ‘[]’.
Notations:
 la liste .(X,L) est également notée [X|L] ,

 la liste .(X1, .(X2, L)) est également notée [X1, X2|L],

 la liste .(X1, .(X2, ..., .(Xn, L) ... )) est également notée: 

[X1, X2, ..., Xn|L],


 la liste [X1, X2, X3, ..., Xn|[]] est également notée: 

[X1, X2, X3, ..., Xn].


LES LISTES
 Par exemple, la liste [a,b,c] correspond à la liste .(a,.(b,.(c,[]))) et
contient les 3 éléments a , b et c.
 La liste [a,b|L] correspond à la liste .(a,.(b,L)) et contient les 2
éléments a et b , suivis de la liste (inconnue) L.
 Une liste est une structure récursive: la liste Liste = [X|L] est
composée d'un élément de tête X et d'une queue de liste L qui est
elle-même une liste. Par conséquent, les relations Prolog qui
manipulent les listes seront généralement définies par:
 une ou plusieurs clauses récursives, définissant la relation sur la
liste [X|L] en fonction de la relation sur la queue de liste L,
 une ou plusieurs clauses non récursives assurant la terminaison de
la manipulation, et définissant la relation pour une liste
particulière (par exemple, la liste vide, ou la liste dont l'élément
de tête vérifie une certaine condition...).

Vous aimerez peut-être aussi