Le langage Prolog (Demo I) Atefeh Farzindar Ift3330 Ift6330 A-2003 1
Table des matières Demo 1 Introduction Syntaxe et terminologie Prolog Les termes en Prolog Les relations, ou atomes logiques Clauses Récursivité 2
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. 3
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) Clause=> Un programme Prolog 4
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 3.Les termes composés 5
I. Les Constantes Les termes atomiques représentent les objets simples connus de l'univers. 1. Atomes : un identificateur est une chaîne alphanumé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. "Toto est \#\{@", "123"). 6
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). 7
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')). élève est le foncteur principal. 8
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. 9
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 paulest le père de jean. 10
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) 11
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é : prédicat/arité, par exemple parent/2. 12
II. Les règles Les règles permettent d exprimer des conjonctions de buts. Leur forme générale est : TÊTE :- C 1, C 2,...,C n. La tête de la règle est vraie si chacun des éléments du corps de la règle C 1,...,C n est vrai. On appelle ce type de règles des clauses de Horn. 13
«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. A :- D. 14
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). ISABELLE JEAN PIERRE MARIE PAUL CATHERINE LUC 15
fils(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). ISABELLE JEAN PIERRE PAUL LUC grand_parent(x,y):- parent(x,z), parent(z,y). MARIE CATHERINE 16
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) :- parent(x, Z),ancêtre(Z, Y). 17
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 même ordre. 18
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 19
?- 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? ; X = pierre 20
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» 21
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']. 22
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. 23
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. 24