L'exemple traite des problèmes relatifs à l'édition d'un document "en langue naturelle", et plus particulièrement à la gestion des références multiples et croisées au sein d'un même texte. L'idée est de placer des étiquettes (labels) dans le texte, et de nommer ensuite symboliquement ces étiquettes pour se référer au numéro de page ou de ligne correspondant.
1. Présentation
2. L'exemple
3. Réalisation
4. Conclusion
Spécification
chaînes de caractères
Les retours à la ligne doivent être explicitement évalués, pour permettre le calcul des numéros de ligne et de page. De ce fait, on abandonne l'ancienne représentation des retours à la ligne : "^M".
(stg m) = indique un retour à la ligne
(stg p) = indique un saut de page
opérateurs
def-pge <num>
définit la pagination. <num> = numéro de la première page
def-lbl <nom>
définit une étiquette dans le texte de nom symbolique <nom>
use-pge <nom>
désigne l'utilisation du numéro de la page où figure l'étiquette de nom <nom>
use-lgn <nom>
identique à use-pge, mais pour le numéro de ligne
Implantation
chaînes de caractères
Concernant le retour à la ligne, il apparaît des défauts dans la spécification initiale :
- mauvaise spécification : le choix de la chaîne "^M" interdit de rendre explicite l'évaluation d'un retour à la ligne ;
- défaut de spécification : on introduit la notion de « saut de page » qui était jusqu'à présent ignorée.
De là il résulte les modifications qui suivent.
stg : evalt-stg
(stg m) et (stg p).atm : imptt-ATM-atome
"^M".stg : imptt-stg et imptc-stg
imp-eval, imp-lst-eval, imp-num-eval
imptt-atm-eval
opérateurs
Il s'agit essentiellement des quatre fonctions d'évaluation : evalt-def-pge, evalt-def-lbl, evalt-use-pge, evalt-use-lgn, lesquelles représentent en moyenne une ligne de code LISP. Les attributs sont directement calqués sur ceux de l'opérateur stg (« opérateur nommé » à un champ unique).