Android Lab Test : Le capteur gyroscope (français)
Le langage Prolog
1. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Sommaire
INTRODUCTION..........................................................................................................2
COMMENT EST STRUCTURÉ UN PROGRAMME ?...........................................................3
QUELLE EST LA STRUCTURE GÉNÉRALE D’UN PROGRAMME ?...........................................................3
QU’EST-CE QU’UN PRÉDICAT ?............................................................................................3
QU’EST-CE QU’UN TERME ?................................................................................................3
QU’EST-CE QUE LE REGROUPEMENT EN PAQUET ?......................................................................3
COMMENT CONSTRUIRE DES RELATIONS ?................................................................4
QUE FAUT-IL SAVOIR SUR LES RELATIONS ?............................................................................4
COMMENT EST EXÉCUTÉE UNE RELATION ?..............................................................................4
REVOIR LES CHOSES DE PLUS PRÈS...........................................................................5
QU’EST-CE QU’UN ARBRE ?................................................................................................5
QU’EST-CE QUE L'UNIFICATION ?.........................................................................................5
QU’EST-CE QUE LA SUBSTITUTION ?......................................................................................5
QU’EST-CE QUE L'EFFACEMENT ?..........................................................................................5
Présentation............................................................................................................5
Algorithme..............................................................................................................5
Recherche de solution..............................................................................................7
1
2. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Introduction
Prolog a été développé par des chercheurs en IA à l'initiative du Japon, en
octobre 1981, lorsque le Japon invite quelques uns des principaux
responsables occidentaux de la recherche et du développement pour leur
présenter un projet ambitieux de développement de systèmes de «
cinquième génération ».
Quinze ans après Lisp, A. Comerauer, dans le but de créer un langage pour
la programmation des problèmes d'analyse de la langue naturelle, met au
point, grâce à la logique du premier ordre et la démonstration automatique
de théorème, le langage Prolog.
Le premier interprète été écrit en 1973 par P. Roussel (écrit en Fortran).
Les principales différences avec les langages classiques sont les suivantes :
• Le Prolog est un langage déclaratif et non procédural (on y donne
uniquement les données).
• Il a un travail non déterministe car il travaille avec des objets
partiellement inconnus ('il cherche toutes les solutions).
Ses applications sont :
• pour toute communication de langage naturel avec l'ordinateur
• pour des calculs formels
• pour les constructions de plan en robotique
• pour faire des compilateurs
• pour faire des SE
Sont évolution est :
• portabilité
• interactivité, avec un éditeur écrit en Prolog
• extensibilité
• fiabilité
2
3. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Comment est structuré un programme ?
Quelle est la structure générale d’un programme ?
C'est la représentation et utilisation des connaissances (ensemble de
relations qui décrivent les propriétés de ces objets et leurs interactions) que
l'on a sur un certain domaine (ensemble d'objets).
S'il y a une relation entre les objets, alors l'ordre est significatif .
Paul est le père de Jean.
RELATION (ou PREDICAT) = « être père »
OBJETS (ou ARGUMENTS) = « Jean » et « Paul »
On dira : « est_père_de (Paul, Jean) ».
Poser la question « Qui est le père de Jean ? » : « est_père_de (x, Jean) »x
est donc une variable.
Qu’est-ce qu’un prédicat ?
C'est un mélange de règles et d'assertions.
Un programme Prolog est une suite de règles.
Une règle est constituée d'une tête de règle (un seul prédicat) et d'une queue
de règle (une suite de littéraux reliées par ":-" ou "if").
Qu’est-ce qu’un terme ?
Les termes (règles, littéraux, arguments) peuvent être une constante
(identificateur, nombre, chaîne de caractères), une variable ou un terme
structuré (u-plet).
Qu’est-ce que le regroupement en paquet ?
L'ensemble des règles et assertions (clauses) permettant de définir un
prédicat doivent être regroupé obligatoirement en paquet.
3
4. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Comment construire des relations ?
Que faut-il savoir sur les relations ?
Pour satisfaire une conjonction de relations, on les examine de gauche à
droite.
Au cours de l'exécution, certaines variables peuvent recevoir des valeurs, si
une variable reçoit une variable, toutes ses occurences prennent la même
valeur.
Dans une relation, il n'y a a pas de distinction entre argument d'entrée et de
sortie.
Comment est exécutée une relation ?
L'exécution est non déterministe : on calcule tous les jeux de valeur qui
satisfont la relation.
Au cours de l'exécution, lorsque Prolog tente de trouver une relation dans la
base, il prend les paquets dans l'ordre où ils se présentent.
4
5. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Revoir les choses de plus près
Qu’est-ce qu’un arbre ?
Un arbre est constitué d'une racine et de sous arbres qui sont eux-mêmes
des arbres.
Tout noeud sans descendant est dit terminal ou feuille.
En Prolog, un arbre peut être partiellement inconnu. Dans ce cas, une au
moins de ses feuilles se réduit à une variable.
Qu’est-ce que l'unification ?
Soit deux arbres comportant éventuellement des parties variables,
l'unification c'est consister à trouver, si elles existent, les valeurs que doivent
prendre les variables présentes dans l'un ou l'autre des arbres pour que
ceux-ci coïncident.
C'est la principale opération effectuée sur les arbres.
C'est le mécanisme fondamental de Prolog pour tenter de trouver des
réponses aux questions.
Qu’est-ce que la substitution ?
Ensemble des égalités (variables = valeurs) qui rendent les deux arbres
égaux.
Qu’est-ce que l'effacement ?
Présentation
« P (...) if Q (...), R (...) » peut s'interpréter par : « pour effacer P (...),
effacer Q (...) puis R (...) ».
« S (...) » peut s'interpréter par : « S (...) s'efface ».
Une question « S1 (...) S2 (...), ...., Sn (...) » peut s'interpréter par : «
effacer S1 (...) puis S2 (...) .... puis Sn (...) ».
Algorithme
• à la fin, si tout est effacé, alors c'est un succès : ce sont les
substitutions pour les valeurs de la question
5
6. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
• sinon, si l'on bute sur un terme qu'on ne réussit par à effacer, c'est
échec
• dans les deux cas :
- retour en arrière
- reconsidèrer le dernier choix que l'on a fait pour tenter d'effacer
le terme d'une autre façon
Question
Indiquer quelles relations existent entre certains objets :
PERE (ANATOLE, BERNARD);
PERE (ANATOLE, CHARLES);
Réponse
Anatole est-le-père-de Bernard.
Anatole est-le-père-de Charles.
Question
PERE (ANATOLE, BERNARD);
Réponse
Oui.
Question
PERE (ANATOLE, XAVIER);
Réponse
Il n'en sait rien.
Question
PERE (ANATOLE, qui);
Réponse
qui= BERNARD
qui= CHARLES
6
7. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
On déclare des règles :
GRAND_PERE (Pepe, Fiston) ->
PERE (Pepe, Papa);
PERE (Papa, Fiston);
Pepe EST-LE-GRAND-PERE de Fiston s'il existe une valeur de Papa pour
laquelle Pépé EST-LE-PERE-DE Papa ET Papa EST-LE-PERE-DE Fiston.
Recherche de solution
Constituons une famille à l'aide des règles suivantes :
PERE (ANATOLE, BERNARD);
PERE (ANATOLE, CHARLES);
PERE (BERNARD, DIDIER);
PERE (CHARLES, ERIC);
GRAND_PERE (Pepe, Fiston) ->
PERE (Pepe, Papa);
PERE (Papa, Fiston);
Soit :
ANATOLE
BERNARD CHARLES
DIDIER ERIC
On pose la question : PERE (BERNARD, qui);
Prolog cherche dans le programme si quelque chose lui permet de trouver la
valeur de "qui" telle que PERE (BERNARD, qui) soit vrai.
PERE (ANATOLE, BERNARD);
PERE (ANATOLE, CHARLES);
PERE (ANATOLE, DIDIER);
qui= DIDIER
PERE (ANATOLE, ERIC);
La réponse est donc : qui= DIDIER
A la question :
PERE (ANATOLE, Enfant);
7
8. Bruno Delb http://www.brunodelb.com Date : 27/12/1998
Le langage Prolog
Prolog cherche :
PERE (ANATOLE, BERNARD);
enfant= BERNARD
PERE (ANATOLE, CHARLES);
enfant= CHARLES
PERE (ANATOLE, DIDIER);
PERE (ANATOLE, ERIC);
La réponse est donc :
enfant= BERNARD
enfant= CHARLES
Question :
GRAND_PERE (ANATOLE, Petit);
Prolog commence ici par la règle 5 :
GRAND_PERE (Pepe, Fiston) ->
PERE (Pepe, Papa);
PERE (Papa, Fiston);
C'est vrai si :
• Pepe = ANATOLE
• Fiston = Petit
• PERE (ANATOLE, Papa); est vrai
• PERE (Papa, Petit); est vrai
Prolog essaie :
PERE (ANATOLE, Papa);
papa= BERNARD
PERE (BERNARD, Petit);
petit= DIDIER
PERE (ANATOLE, Papa);
papa= CHARLES
PERE (CHARLES, Petit);
petit= ERIC
8