next up previous contents
suivant: Algorithme de résolution de monter: La résolution de buts précédent: La résolution de buts   Table des matières

Principe

La résolution de buts consiste répondre à une question posée par l'utilisateur, exprimée par le compilateur sous forme de buts (en fait le compilateur ne fournit qu'une suite de termes qu'il faut alors transformer via la fonction But_Constuire en une pile de buts).
La procédure Resoudre prend en argument une pile de buts et une pile d'environnements dans laquelle les buts doivent être résolus. Elle prend en compte le premier but à effacer (sommet de la pile) et tente de l'unifier successivement à chacune des règles (non déterminisme) du paquet qui possède le même nom et le même nombre d'arguments que le sous-but. La procédure Resoudre prend en plus comme paramètre le niveau d'appel de la récursivité. Cela sert notamment à connaître les niveaux des variables que l'on empile sur la pile d'environnement.
Chaque étape de la résolution (correspondant chacune à un appel à la procédure Resoudre) est visualisée à l'aide d'un arbre dit de résolution, dans lequel chaque n\oe ud représente un appel récursif (caractérisé par sa pile de buts et sa pile d'environnements) et les différents fils d'un n\oe ud représentent le non déterminisme résultant des tentatives d'unification successives avec les différentes clauses candidates.

Figure: Arbre de résolution
\includegraphics [scale=0.50]{/home/alex/Cours1999-2000/Projet_Compil/Rapport/Jojo/im12.ps}

La notion d'arbre de résolution ne doit pas être confondue avec la notion d'arbre vue précédemment qui permettait de représenter un terme. Deux exemples ont été développés (cf. figure 2.1 et figure 2.2) : ils représentent deux arbres de résolution pour deux exemples différents venant illustrer la résolution de buts.

Figure: Un nouvel arbre de résolution
\includegraphics [scale=0.50]{/home/alex/Cours1999-2000/Projet_Compil/Rapport/Jojo/im2.ps}

Le premier exemple cherche à savoir si le mot laval est un palindrome, grâce aux règles suivantes: Cet exemple sert juste à montrer l'évolution de la pile d'environnements à chaque appel récursif.
Le deuxième exemple cherche tous les chemins dans un graphe (cf. figure 2.3) partant de l'état 1. Comme cet exemple est assez long, seule un partie significative a été développée. On a les règles suivantes:

Figure 2.3: Graphe
\includegraphics [scale=0.5]{/home/alex/Cours1999-2000/Projet_Compil/Rapport/Jojo/im3.ps}

Cet exemple permet de montrer l'évolution des niveaux des environnements et des niveaux des variables à chaque appel récursif. On convient de distinguer les environnements de même indice, c'est-à-dire les environnements résultant de l'unification successive avec les différentes clauses candidates (non déterminisme) par un exposant.
next up previous contents
suivant: Algorithme de résolution de monter: La résolution de buts précédent: La résolution de buts   Table des matières
Alexandre DAGAN
2000-07-07