Le langage Prolog
(Demo I)
Atefeh Farzindar Ift3330 Ift6330 A-2003Table des matières
Demo 1
• Introduction
• Syntaxe et terminologie Prolog • Les termes en Prolog
• Les relations, ou atomes logiques • Clauses
Introduction
Le Prolog est un langage de programmation
symbolique lié :
•
à la logique formelle;
•
à une modélisation du raisonnement;
•
au traitement linguistique;
•
Application, aux bases de données : il
est facile d’interfacer une base de données
avec un module logique écrit en Prolog.
Syntaxe et terminologie Prolog
• Un programme Prolog est constitué d'un ensemble de clauses ; une clause est une affirmation portant sur des atomes logiques ; un atome logique exprime une relation entre des termes ;
• termes et relation entre des termes => clause
ex: père(marie,luc)
1.
Les termes en Prolog
Les objets manipulés par un programme
Prolog (les "données" du programme) sont
appelés des termes.
1.Les Constantes
2.Les variables
I. Les Constantes
Les termes atomiques représentent les objets simples connus de l'univers.
1. Atomes : un identificateur est une chaîne
alpha-numérique commençant par une minuscule (ex. toto, aX12, jean_Paul_2 ).
2. Nombres : entiers ou flottants (ex. 19, -25, -3.14,
23E-5).
3. Chaînes de caractères entre guillemets (ex.
II. Les variables
• Les variables représentent des objets inconnus de l'univers.
• Une variable Prolog représente toujours le même objet tout au long de sa durée de vie et ne peut pas changer de valeur.
La variable commençant par:
1. Une majuscule =>La valeur de la variable nous intéresse. (ex. Var, X, Var_longue_2)
2. Un sous-ligné => La valeur de la variable anonyme ne nous importe pas. (ex. _objet, _21).
III.
Les termes composés
• Les termes composés représentent les objets composés de l'univers. Ils se composent d’un foncteur avec une suite d’arguments.
• Les arguments peuvent être des atomes, des nombres, des variables, ou bien des structures Exemple:
élève(robert, 1975, info, 2,
adresse(6, 'jean Brillant', 'Montréal')).
foncteur (t1, ..., tn)
Foncteur est une chaîne alpha-numérique commençant par une minuscule, et t1, ..., tn sont des termes (variables, termes élémentaires ou termes composés).
• Le nombre d'arguments n est appelé arité du terme.
• Exemple : adresse(18,’ave Decelles’,Ville)
est un terme composé de foncteur adresse et d'arité 3, dont les deux premiers arguments sont les termes élémentaires et le troisième argument est la variable Ville.
2. Les relations, ou atomes logiques
symbole-de-prédicat(t1, ..., tn )
• Un atome logique exprime une relation entre des termes ; cette relation peut être vraie ou fausse.
• Ça commence par une minuscule, et t1, ..., tn sont des termes.
• Le nombre d'arguments n est appelé arité de l'atome logique.
Exemple : père(paul, jean).
est une relation d'arité 2 entre les termes élémentaires paul
et jean pouvant être interprétée par paul est le
3. Clauses
Syntaxe <tête> :- <corps>Trois sortes de clauses :
I. Faits Ex. masculin(jean).
II. Règles Ex. parent(X, Y):-père(X, Y).
parent(X, Y):-mère(X, Y).
III. Questions Ex. ?- masculin(jean).
Yes
?- masculin(françois). No. (Pas dans la base de données)
I.
Les faits
• Faits est en effet équivalente à :
fait :- true. (Pas de corps)
La forme générale d’un fait est la suivante :
prédicat(argument1,argument2, …).
Un prédicat est un symbole qui traduit une relation. L’arité est le nombre de ses arguments. On identifie un prédicat par son nom et son arité :
II. Les règles
• Les règles permettent d’exprimer des conjonctions de buts. Leur forme générale est :
• TÊTE :- C1, C2,... ,Cn.
• La tête de la règle est vraie si chacun des éléments du corps de la règle C1,... ,Cn est vrai. On appelle ce type de règles des clauses de Horn.
« OU » et « ET » Logique :
Dans le corps d’une règle, la virgule « , » est
le symbole représentant un ET
logique (conjonction). Le symbole « ; »
représente le OU logique (disjonction).
A :-B,C;D.
est équivalent à
A :- B,C.
Exemple
masculin(jean). masculin(paul). masculin(luc). masculin(pierre). féminin(isabelle). féminin(catherine). féminin(marie). père(jean,paul). père(jean,isabelle). père(paul,luc). père(luc,catherine). mère(isabelle,pierre). mère(catherine,marie). CATHERINE ISABELLE JEAN PAUL LUC PIERRE MARIEfils(A,B):-père(B,A), masculin(A). fils(A,B):-mère(B,A), masculin(A). parent(X,Y):-père(X,Y). parent(X,Y):-mère(X,Y). grand_parent(X,Y):- CATHERINE ISABELLE JEAN PAUL LUC PIERRE
Récursivité
Définissons un nouveau prédicat « ancêtre/2 » déterminant l’ancêtre X de Y par récursivité :
1. Condition de terminaison de la récursivité si c’est un parent direct.
ancêtre(X, Y) :- parent(X, Y).
2. Sinon X est ancêtre de Y si et seulement si il existe Z, tel que X parent de Z et Z parent de Y.
ancêtre(X, Y)
• Lors de l’exécution d’une requête, Prolog examine les règles ou les faits correspondants dans l’ordre de leur écriture dans le programme : de haut en bas.
• Il utilise la première règle (ou le premier fait) du prédicat pour répondre. Si elle échoue, alors il passe à la règle suivante et ainsi de suite jusqu’à épuiser toutes les règles (ou tous les faits) définies pour ce prédicat.
• Lorsqu’une règle est récursive, l’interprète Prolog rappelle le prédicat du même nom en examinant les règles (ou les faits) de ce prédicat dans le
III. Les questions
Une fois le programme chargé, on peut poser des questions sur les faits.
On peut aussi utiliser des variables. Elles peuvent s’identifier à toutes les autres valeurs : aux constantes, aux termes composés, aux variables elles-mêmes.
« ; » demander la solution suivante, Retour arrête la recherche des solutions. | ?- mère(isabelle,X). X = pierre ?; Yes | ?- parent(jean,X). X = paul ? ; X = isabelle
| ?- fils(A,B). A = paul, B = jean ? ; A = luc, B = paul ? ; A = pierre, B = isabelle | ?- ancêtre(jean,X). X = paul ? ; X = isabelle ? ; X = luc ? ; X = catherine ? ;
Utilisation de Sicstus Prolog au
DIRO
1. Dans votre fichier de configuration du
shell(.cshrc) ajouter la ligne:
inclure sicstus–3.9.0
2. Pour utiliser Prolog:
%sicstus
3.
Écrivez votre programmes dans un fichier
texte avec le suffixe « .pl »
Chargement de fichiers
Pour compiler et charger un programme : ?- consult(nom_du_fichier). par exemple :
?- consult('file.pl').
ou bien le raccourci avec la commande : ?- [nom_du_fichier].
par exemple
?- ['file.pl'].
Chargement de plusieurs fichiers simultanément ?- ['file1.pl', 'file2.pl'].
• Si on modifie le programme dans le fichier, on peut mettre à jour la base de données par
?- reconsult('file.pl'). Le raccourci de rechargement est : ?- [-'file'].
• Difference entre reconsult et
consult:consult toujours concatène les
nouvelles règles à la B. de C. mais reconsult redéfinie les anciennes relations qui étaient déjà définies.
L’affichage du contenu du fichier chargé se fait par : ?- listing.
L’affichage d’une clause particulière, ici « père», se fait par :
?-listing(père/2).(ou listing(père)) père(paul, jean).
père(luc,paul).
• Finalement, on quitte Prolog avec halt.