Académique Documents
Professionnel Documents
Culture Documents
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)
?- 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.
max2(X,Y,X) :- X>=Y.
max2(X,Y,Y) :- X<Y.
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] ,