![]()
Précédent : La mise en oeuvre de Remonter : Les langages de
programmation logique Suivant : Applications de
Prolog
Participants : Pascale Louvet, Olivier Ridoux
Prolog est un des
premiers langages de programmation logique qui soit à la fois
typé et qui ait fait l'objet d'une implantation et d'une
utilisation en vraie grandeur. Le résultat est une connaissance
expérimentale des avantages et des inconvénients du système de
types le plus souvent proposé pour la programmation logique. Ce
système peut être vu comme une transposition de celui de ML, avec
des adaptations rendues nécessaires par la différence de
structure des programmes. En première approximation, un prédicat
à plusieurs têtes, au lieu d'une seule pour une fonction ML, et
un programme est fait d'un unique let qui introduit
plusieurs définitions mutuellement récursives, alors que les
let sont librement imbriqués en ML.
L'expérience de l'implantation de
Prolog et de son utilisation, surtout dans un contexte de
méta-programmation, montre que ce style de typage est inadapté.
La racine du problème vient du polymorphisme générique, à la ML.
Nous avons trouvé des solutions à ce problème en adoptant une
discipline de types polymorphes paramétriques. Nous avons défini
une variante de
Prolog, appelée
2Prolog, qui permet de
passer des types en paramètres des prédicats et des fonctions, de
quantifier des variables de type, de les abstraire et de
conditionner l'exécution d'un but par la vérification d'un type.
La syntaxe et la sémantique de ce langage ont été
formalisées [16, 3].
Les notations de types rendent la nouvelle syntaxe difficile à
manipuler. Nous avons donc étudié la question de la
reconstruction de ces notations. Ce travail a abouti à un système
formel de complétion de types qui permet de retrouver la syntaxe
de
Prolog pour tous les
programmes
2Prolog qui sont
compatibles avec
Prolog\ et qui, bien
sûr, peut exiger quelques notations de types pour les autres.
Le système de vérification et de complétion des types de
2Prolog a été
implémenté. Le schéma d'exécution de
2Prolog ne l'a pas encore été.