.
Mémoire Adaptée aux Langages
Indéterministes [Bekkers et al. 88].
Élément logiciel [Ridoux 91]
ou matériel [Bekkers et al. 86]
qui se comporte comme une mémoire
et offre des services adaptés aux langages de programmation logique.
L'adaptation consiste à mémoriser des termes plutôt que des mots,
à offrir un service de récupération de mémoire automatique
et à prévoir les besoins du parcours d'un arbre de recherche
en profondeur d'abord avec retour-arrière.
Le traitement simultané des deux derniers points est fondamental
car ils s'influencent mutuellement.
La possibilité de retour-arrière fait que la présence d'un chemin de références depuis une racine jusqu'à un objet n'implique pas que cet objet est utile. Il faut en plus que le chemin de références vérifie certaines contraintes. Cette relation entre ce qui est connu de la dynamique d'un système et la spécification de ce qui est utile est appelé la logique d'utilité. Le retour-arrière est aussi une forme rudimentaire mais importante (parce que quasi gratuite) de récupération de mémoire. Cet effet doit cohabiter avec une gestion de mémoire plus raffinée et plus précise.
n'offre aucune structure de contrôle.
Tout le contrôle est
à décrire dans le processeur qui utilise
.
C'est la garantie d'une flexibilité très importante.
Les structures de données offertes par
ont pu servir
à implémenter,
outre
Prolog,
des variantes de
Prolog
[Le Huitouze 88, Le Huitouze 90b],
de
[Ridoux 89]
et de l'unification des expressions
booléennes [Ridoux et Tonneau 90].
.
(rel. imitation* et projection*)
La procédure
est la partie de la procédure de
-unification
qui produit les substitutions solutions.
La multiplicité des solutions est gérée par la construction d'un arbre
de recherche qui se trouve avoir une structure compatible avec celui de
Prolog.
Les mises en
uvre de
Prolog fusionnent donc les deux arbres de
recherche et contrôlent la multiplicité des solutions par retour-arrière.
Dans
*,
l'enchaînement des opérations est simplement rédigé en
Prolog,
de façon à ne pas dupliquer la programmation des point de choix
et du retour-arrière.
La version de utilisée pour
Prolog
(
-équivalence)
est la suivante :
Chaque ou
dénote un
,
où
est une inconnue nouvelle et d'un type approprié.
Matrice.
n.f.
(
prénexe*)
Métaprogrammation.
n.f.
(rel. représentations close*, non-close* et par abstraction*)
Domaine de programmation où les données sont elles-mêmes des programmes.
On distingue le métaprogramme, écrit dans le métalangage,
et le programme objet, écrit dans le langage objet.
La notion n'a vraiment d'intérêt que lorsque les deux langages
sont proches au point qu'on peut se demander si on peut en superposer des parties
(voir section «La métaprogrammation»*).
Métavariable.
n.f.
(rel. métaprogrammation*)
Variable d'un métaprogramme dont le domaine de valeur est celui des
structures objets.
La relation entre métavariable et variable objet*
est un des problèmes de la métaprogrammation.
Miller,
Dale
(États-Unis, 1956).
À la suite de recherches sur la démonstration automatique en logique d'ordre
supérieur Dale Miller propose
avec Gopalan Nadathur un nouveau langage de programmation logique,
Prolog,
lui-même d'ordre
supérieur [Miller et Nadathur 86b, Nadathur 87].
Miller présente ensuite différents aspects de ce langage comme
la modularité [Miller 93],
l'abstraction des
données [Miller 89a],
ou l'unification de
Prolog [Miller 91d, Miller 92].
La théorie des preuves effectuées en Prolog est celle des
preuves uniformes*
pour la logique intuitionniste.
Miller étend cette théorie à un fragment de la logique
linéaire [Hodas et Miller 94],
puis à sa totalité [Miller 94].
Dale Miller est actuellement (1998) professeur à Pennsylvania State University.
Mode.
n.m.
(rel. réversibilité*)
Attribution aux paramètres d'un prédicat de rôles d'entrées,
de sorties, ou d'un rôle mixte.
Une caractéristique de la programmation logique* est de permettre
d'écrire des prédicats réversibles.
Cependant,
tous les prédicats ne sont pas réversibles,
soit parce que la relation qu'ils implémentent ne s'inverse pas aisément
(par exemple,
dériver/intégrer),
soit parce qu'ils sont définis en termes d'opérations non-logiques
(par exemple,
lire ou écrire).
De plus,
la réversibilité a un coût que le programmeur qui a
l'intention de n'utiliser qu'une direction ne veut pas toujours payer.
La notion de mode permet d'exprimer la directionnalité (souhaitée ou subie) des prédicats. Le langage d'expression des modes est souvent fondé sur la notation +-? pour décrire les arguments considérés fournis (+), les arguments considérés calculés (-) et les arguments indifférents («?»). Par exemple, les 3 usages du prédicat conc_f décrits dans l'article «Réversibilité»* sont décrits par les modes (conc_f + + -), (conc_f + + +), et (conc_f - - +).
Selon les systèmes, les modes peuvent faire l'objet de déclaration, de vérification, ou de synthèse. Un compilateur peut en tenir compte pour rendre le code produit plus efficace.
Module.
n.m.
Partie de programme considérée comme formant une entité cohérente.
La notion est très dépendante des langages.
En programmation logique,
un module est le plus souvent une collection de clauses.
Miller propose d'interpréter l'implication dans les buts comme le chargement d'un module pour la durée d'un calcul [Miller 93] selon le schéma suivant :
résultat :- module => But .
Ainsi au lieu d'une conjonction de clauses la prémisse d'une implication pourrait être un nom de module. Au moment d'interpréter cette implication, le module serait lu et ses clauses seraient ajoutées au contexte de la preuve pour la durée de la preuve de la conséquence de l'implication.
Avec l'avènement
du (World Wide Web),
on pourrait remplacer le nom de module par un
(Universal Resource Locator) et le télécharger.
Il faut noter qu'on donne ainsi une capacité «Internet» à un langage de
programmation logique sans en changer la logique.
Multiplicité.
n.f.
Caractérise le nombre de solutions d'un but.
On abstrait en général ce nombre en quelques catégories :
pas de solutions (but absurde),
0 ou 1 solution (but servant de condition),
exactement 1 solution,
0 ou plusieurs solutions,
au moins une solution,
multiplicité inconnue.
Cette information est utile pour raisonner sur les programmes,
pour les transformer,
et pour les compiler.
On peut aussi fournir à l'utilisateur un moyen d'expression de la multiplicité,
et vérifier que la multiplicité déclarée par l'utilisateur est compatible
avec la multiplicité observée par analyse du programme.