81
PREMIER MINISTRE C E A - R 3040 COMMISSARIAT A L'ÉNERGIE ATOMIQUE LE TRAITEMENT DE LISTES EN PROGRAMMATION SLIP: Langage de listes symétrique Applications par Yvon BROUDIN Rapport C E A - R 3040 . * CENTRE D'ETUDES NUCLÉAIRES DE SACLAY

SLIP: Langage de listes symétrique Applications

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SLIP: Langage de listes symétrique Applications

P R E M I E R M I N I S T R E C E A - R 3040

C O M M I S S A R I A T AL'ÉNERGIE ATOMIQUE

LE TRAITEMENT DE LISTES EN PROGRAMMATION

S L I P : Langage de listes symétrique

Applications

par

Yvon BROUDIN

Rapport C E A - R 3040

. * C E N T R E D ' E T U D E SN U C L É A I R E S D E S A C L A Y

Page 2: SLIP: Langage de listes symétrique Applications

CEA-R 3040 - BROUDIN Yvon

LE TRAITEMENT DE LISTES EN PROGRAMMATIONSLIP : Langage de listes symétrique - Applications

Sommaire. - La programmation moderne ne se satisfait plus des méthodesclassiques de traitement séquentiel ni des tableaux à positions de mémoirecontiguës. Elle tend à généraliser les méthodes de listes où les cellulesd'un groupe n'ont pas .de relation de voisinage, mais sont enchaînées enlistes, l'une donnant l'adresse machine de l'autre. Ces méthodes sont in-dispensables en "partage de temps" et* dans les traitements en "tempsréel". De plus, elles permettent de traiter des problèmes nouveaux etd'optimiser le temps de traitement de nombreux ai.tres.

De nombreux exemples sont traités, après un résumé des langagesles plus utilisés et une étude plus précise d'un langage de listes : SLIP.Parmi les exemples traités signalons la recherche lexicographique, letraitement de symboles alphanumériques, la dérivation formelle.

Problème traité en FORTRAN II sur IBM 7094. Les sous-program-mes constitutifs du langage sont fournis en annexe.

1966 - Commissariat à l'Energie Atomique - France 152p.

CEA-R 3040 - BROUDIN Yvon

PROGRAMMING LIST PROCESSESSLIP : Symétrie list processor - Applications

Summary. - Modern aspects of programming languages are essentiallyturned towards list processing. The ordinary methods of sequential treatmentbecome inadequate and we must substitute list processes for them, wherethe cells of a group have no neighbourhood connection, bu\ where the addressof one cell is contained in the preceding one. These methods are requiredin "time sharing" solving problems. They also allow us to treat new pro-blems and to solve others in the shortest time.

Many examples are presented after an abstract of the most usuallist languages and a detailed study of one of them : SLIP. Among theseexamples one should note : locating of words in a dictionary or in a cardindex, treatment of non numerical symbols, formal derivation.

The problems are treated in FORTRAN II on an IBM 7094 machine.The subroutimes which make up the language are presented in an appendix.

1966 - Commissariat à l'Energie Atomique - France 15 2 P-

Page 3: SLIP: Langage de listes symétrique Applications

- Rapport CEA-R 3040 -

Services Scientifiques

LE TRAITEMENT DE LISTES EN PROGRAMMATION

SLIP : Langage de listes symétrique

Applications

par

Les rapports du COMMISSARIAT A L'ENERGIE ATOMIQUE sont, à partir du n<> 2200,en vente à la Documentation Française, Secrétariat Général du Gouvernement, Direction dela Documentation, 16, rue Lord Byron, PARIS VlUème,

The C*E,A, reports starting with n° 2200 are available at the Documentation Française,Secrétariat Général du Gouvernement, Direction de la Documentation, 16, rue Lord Byron,PARIS VlUème.

Yvon BROUDIN

(Thèse présentée à la Faculté des Sciences de Paris,Centre d'Orsay,

pour obtenir le titre de Docteur de Sème cycle,spécialité : Electronique)

- Juin 1966 -

Page 4: SLIP: Langage de listes symétrique Applications

Avant de présenter ce travail, Je tiens à remercier Monsieurle Professeur BLAQUIERE d'avoir bien voulu accepter de présider ce Jury.

Je tiens aussi à remercier Monsieur le Professeur BERNARD qui, en dépit

de ses nombreuses occupations a bien voulu accepter d'être membre du Jury,

Je tiens à exprimer ma profonde reconnaissance à Monsieur

DEBRAINE qui a dirigé mes travaux, et qui, à tout moment, a su me prodi-

guer ses conseils et orienter mes recherches. Les conditions matérielles

qu'il a mises à ma disposition à Saclay m'ont permis de travailler dans

les meilleures conditions et de mener à bien mes travaux.

Je dois beaucoup à Monsieur GAUGENOT du Service de Calcul

Electronique de Saclay, chargé de l'assistance FORTRAN, dont j'ai beau-

coup apprécié les conseils techniques lors de mes fréquentes erreurs de

programmation.

Je tiens aussi à remercier tous ceux qui m'ont permis de pré-

senter cette thèse à la date prévue, et en particulier Mademoiselle

BOURGEOIS, Madame COHEN et le personnel du Service de Documentation

de Saclay qui ont, en un temps record réalisé le travail de présentation

matérielle.

Page 5: SLIP: Langage de listes symétrique Applications

TABLE DES MATIERES

INTRODUCTION Pages

1 - Représentation des informations sur ordinateur 4

- Mode habituel de traitement. Tableaux de données

Caractère séquentiel des informations

- Structures séquentielles. Structures enchaînées.Graphes

2 - Historique critique des langages de listes 8

- IPL V Information Processing Language V 9

- LISP - LISP 1.5 - LISP ALGOL 16

I - SLIP - Symétrie List Processor - Langage de listes 20symétrique

1-1 - Caractéristiques fondamentales de SLIP

- Différents types de cellules 21

- Construction de listes - Suiveur 22

- Marques 25

- Réserve - Renvoi des listes en réserve 26

1-2 - Description du système

1-2-1 - Fonctions primitives 29

1-2-2 - Création de la réserve 31

1-2-3 - Création de listes 33

1-2-4 - Substitutions 34

1-2-5 - Renvoi de cellules en réserve 35

1-2-6 - Mécanisme du suiveur 38

1-2-7 - La récursivité en SLIP 40

1-2-8 - Les données en SLIP 42

1-2-9 - Ecriture du langage 45

Conclusion - Le langage SLIP 46

II - REALISATIONS

II-l « Optimisation de la taille de la réserve 48

II-2 - Différentes présentations des listes

II-2-1 - Sous-programme IMPLST 49

II-2-2 - Passage de la liste de symboles à la 50liste SLIP

II.2-3 - Passage de la liste SLIP à la liste 51de symboles avec parenthèses

Page 6: SLIP: Langage de listes symétrique Applications

Pages

II-3 - Logement de données longues et de symboles

II-3-1 - Fonctions WAGON, TABLEAU

II-3-2 - Manipulation des symboles

II-4 - Dictionnaires

II-5 - Calcul de la valeur d'une fonction représentéepar une liste

II-6 - Dérivation formelle

CONCLUSION

51

52

5358

6l

64

- 1 -

INTRODUCTION

Le concept qui prévalait en ant que fil conducteur en

programmation était la notion de séquence. En ce qui concerne les

langages ordinaires et généraux tels les "ALGOL", les "FORTRAN",...

le travail se fait instruction après instruction donc en séquence.

Par ailleurs, la disposition de tableaux de valeurs, à une ou N

dimensions se fait aussi dans des suites de mémoires à adresses

contiguës. Les directions dans lesquelles s1oriente la programma-

tion moderne tendent à bousculer quelque peu cette idée de séquence,

tant dans le temps que dans l'espace machine, par deux voies qui,

nous le verrons, se rejoignent : la programmation en temps réel et

les langages de listes. La première définit des priorités et des

ordres de passage de programmes ou d'éléments de programme, soit

pour économiser du temps machine, soit pour utiliser immédiatement

des données se présentant de façon aléatoire dans le temps. La

seconde conduit à un enchaînement non séquentiel de termes, de données

ou d'instructions, voire de symboles, qui seront traités par et pour

leur structure, qui tient plus du graphe ou de l'organigramme que du

tableau ou de la matrice. C'est essentiellement ce second aspect du

problème que nous nous proposons d'étudier dans ce travail.

Un certain nombre de langages de listes ont vu le jour ces

cinq dernières années, essentiellement aux Etats-Unis, particulière-

ment au MIT sous l'impulsion d'équipes dirigées par Me Carthy (LISP),

Gelerntner (PLPL), Newell (IPL V), Weizenbaum (SLIP), Yngve (COMIT).

Chaque langage s'inspire de ses prédécesseurs, améliore leurs

performances, retient leurs qualités et élimine leurs défauts. Le

langage que nous nous proposons d'étudier plus spécialement est le

Page 7: SLIP: Langage de listes symétrique Applications

- 2 -

"Symétrie List Processor" ou SLIP qui a été mis au point aux

alentours de I9&3> puis amélioré par la suite, par J. Weizenbaum

à la General Electric et au Massassuchets Institute of Technology*

La caractéristique principale de ce langage est son enchaînement

symétrique et sa "réserve de cellules disponibles" (free storage)

enchaînée.

Il existe deux possibilités principales pour rendre un

langage pratiquement utilisable : créer un compilateur spécialement

adapté au langage ce qui a été maintes fois réalisé pour IPL V,

LISP, COMIT, ou l'exprimer en un autre langage (imbedding) qui peut

être un langage machine (première version de SLIP) ou un langage

plus évolué, FORTRAN ou ALGOL (réalisé en FORTRAN pour SLIP et en

ALGOL pour LISP).

L'étude que nous avons faite de SLIP a été réalisée sur

IBM 7094 disposant d'un compilateur FORTRAN. Les programmes et

sous-programmes seront donc écrits en FORTRAN ou en son langage

machine FAP. Un avantage important de cette écriture est de pouvoir

appeler des sous-programmes du type fonction en chaîne :

L2 = LSG (CONT (LCRTCH (LA) - l)

Un inconvénient important est, parallèlement, le manque de

souplesse du procédé qui utilise le général pour le particulier,

annihilant de ce fait un grand nombre de mémoires auxiliaires utilisées

par le compilateur et le chargeur ainsi que par les sous-programmes de

service, tous chargés à la suite du programme principal. Cet incon-

vénient est minime lorsque l'on dispose d'une machine à nombre de

mémoires important, mais est particulièrement gênant sur les petites

machines où l'on peut être amené à étudier une version simplifiée du

langage. Si la place dont on dispose est insuffisante on peut toute-

fois loger sur bandes une partie des données, ou des structures figées,

ce qui dans notre cas est particulièrement facile grâce aux mécanismes

d'entrée - sortie du FORTRAN. Cette façon de procéder à des mises

en mémoire auxiliaires (auxiliary storage) a été étudiée plus en détail

pour d'autres langages (LISP en particulier) où le problème est plus

aigu du fait de la non récupération des cellules devenues inutiles

(unneeded) dans le cours du traitement, ou de la nécessité de procéder

à leur récupération et éventuellement à un tassement en tête de la ré-

serve. On peut être alors amené à de longues études de rentabilité et

de fréquence d'utilisation des mémoires auxiliaires.

Cependant exprimer un langage de listes en un autre langage

plus général comporte un certain nombre d'avantages : possibilités de

le comprendre et de l'utiliser plus rapidement, possibilité de travail-

ler sur des machines courantes, à usage multiple, dont l'accès au com-

pilateur n'est pas possible, plus grande facilité d'introduction de

données et de sortie de résultats, d'une manière générale utilisation

des possibilités du système d'exploitation lié à ce langage plus général.

Page 8: SLIP: Langage de listes symétrique Applications

- 5 -

L'exploration des structures est foncièrement différente.

Dans les deux cas on doit connaître ou l'origine du tableau, ou celle

de la liste. Dans le cas du tableau, la valeur d'un ou plusieurs

index, ajoutée (FORTRAN IV), ou soustraite (FORTRAN II) à l'adresse

absolue de l'origine A donne la position de la cellule, manipulation

longue d'indices nombreux, qui limite les dimensions. Dans le second

cas, l'exploration se fait au moyen de sous-programmes ou d'instructions

reconnues par le compilateur, et nous transporte successivement d'une

position de mémoire a. l'autre, positions non contigu'ës dans la machine.

On peut ainsi en rajouter à volonté (données supplémentaires - nouvelles

valeurs...) ce qui est impossible dans le cas classique du tableau, où

les valeurs, les positions, leur nombre, sont fixés à l'avance.

Ceci permet de penser que la reconnaissance de structures,

la démonstration de théorèmes, le travail sur données littérales...

passe par le traitement de listes, plutôt que par la programmation

de type classique séquentiel.

Il est vraisemblable que l'une des idées qui ont conduit

à l'étude des listes, est la possibilité, offerte par ces dernières,

d'augmenter au cours du traitement la taille d'un tableau, autant qu'il

s'avère nécessaire de le faire, dans des limites très grandes, seulement

bornées par la taille de la mémoire centrale de la machine. Ceci évite

d'avoir à fixer les limites a priori, avant traitement ou entrée des

informations. Le tableau en liste grandit au fur et à mesure de l'arri-

vée des données c'est-à-dire au cours du traitement proprement dit.

Un graphe représente les relations d'un système. Il relie

par des liaisons orientées un certain nombre de noeuds. Ce graphe

peut être cyclique ou non. On définit en théorie des graphes la notion

d'arbre, qui est l'ensemble maximal des graphes terminaux ne contenantUUU UC UCJ.AUJ.CO ww.U«.i.wii«.«<.".«» ••»Pas de cellule vide

Pig. I.1.1

3

P

Mm

m

•&,

L'exploration des structures est foncièrement différente.

Dans les deux cas on doit connaître ou l'origine du tableau, ou celle

de la liste. Dans le cas du tableau, la valeur d'un ou plusieurs

index, ajoutée (FORTRAN IV), ou soustraite (FORTRAN II) à l'adresse

absolue de l'origine A donne la position de la cellule, manipulation

longue d'indices nombreux, qui limite les dimensions. Dans le second

cas, l'exploration se fait au moyen de sous-programmes ou d'instructions

reconnues par le compilateur, et nous transporte successivement d'une

position de mémoire à l'autre, positions non contigu'ës dans la machine.

On peut ainsi en rajouter à volonté (données supplémentaires - nouvelles

valeurs...) ce qui est impossible dans le cas classique du tableau, où

les valeurs, les positions, leur nombre, sont fixés à l'avance.

Ceci permet de penser que la reconnaissance de structures,

la démonstration de théorèmes, le travail sur données littérales...

passe par le traitement de listes, plutôt que par la programmation

de type classique séquentiel.

Il est vraisemblable que l'une des idées qui ont conduit

à l'étude des listes, est la possibilité, offerte par ces dernières,

d'augmenter au cours du traitement la taille d'un tableau, autant qu'il

s'avère nécessaire de le faire, dans des limites très grandes, seulement

bornées par la taille de la mémoire centrale de la machine. Ceci évite

d'avoir à fixer les limites a priori, avant traitement ou entrée des

informations. Le tableau en liste grandit au fur et à mesure de l'arri-

vée des données c'est-à-dire au cours du traitement proprement dit.

Un graphe représente les relations d'un système. Il relie

par des liaisons orientées un certain nombre de noeuds. Ce graphe

peut être cyclique ou non. On définit en théorie des graphes la notion

d'arbre, qui est l'ensemble maximal des graphes terminaux ne contenant

pas de maille (fig. I.1.2)

»™ÎB«

Page 9: SLIP: Langage de listes symétrique Applications

- 6 - - 7 -

•* 7X

^

^

en pointillé lescordes restantes

fig. I.1.2

graphe arbre 1 arbre 2

Ceci permet une analogie simple avec les listes, car un

noeud peut être lié à plusieurs autres par une structure de liste

arborescente, mais nous verrons qu'il n'est pas interdit de faire

des listes cycliques. Si nous représentons les noeuds par une liste,

il est très possible de représenter les graphes terminaux des compo-

sants par des relations de liste à sous-liste, auxquelles peuvent

être associées la variable à travers, la variable aux bornes et la

relation entre ces variables.

liste propriétésnoeud e

liaison avecnoeud e

liste depropriétés

de a

liste noeud e

Liste noeud b

1liaison avecnœud a

liaison avecnoeud e

liaison avecnœud c

liât® de propriétésde b

. 1.1,3

Les relations aux bornes - à travers - leur relation interne - doivent

être liées aux liaisons d'accrochage, aux sous-listes, ce qui nécessite

une structure spéciale, permettant de stocker des données relatives à

chaque liaison (p. ex. chaque liaison suivie de 2 données la caracté-

risant) .

Les liaisons sont biunivoques, mais elles sont orientées, ce

qui permet de supprimer la moitié des liaisons pour représenter des

graphes orientés, ou de laisser subsister les deux liaisons ce qui

donne des graphes non orientés.

- Liste noeud A pointe vers Liste noeud B

- Liste noeud B pointe vers Liste noeud A

Cette représentation des graphes est la seule accessible

simplement au traitement digital, car elle permet les liaisons cycli-

ques et permet de rajouter ou de supprimer des graphes terminaux.

Page 10: SLIP: Langage de listes symétrique Applications

- 8 -

2 - HISTORIQUE CRITIQUE DES LANGAGES DE LISTES

Les principales sources de SLIP sont quatre langages et

procédés de traitement de listes antérieurs : FLPL ( FORTRAN compiler

list-processing language) par A. Gelerntner - IPL V (Information

processing language V) par A. Newell - Threaded lists par A.J. Perlis -

et un langage du même auteur : -J. Weizenbaum, KLS datant de 1962.

Un certain nombre de perfectionnements ont été par la suite apportés,

dont plusieurs sous l'influence directe de LISP. L'idée de "liste

d'espace disponible" vient essentiellement de IPL V comme d'ailleurs

certains sous-programmes ou fonctions sont analogues à des "J processes"

du même IPL V. Comme dans tous les systèmes de traitement de listes,

les positions de mémoires pour loger les données ne sont pas pré-

assignées. Elles sont fournies au cours du traitement du programme,

et non au moment de la compilation et du chargement. De plus, deux

cellules appelées consécutivement, pour loger deux données, ne sont

pas obligatoirement voisines. Comme la plupart des autres langages

de listes, SLIP permet l'exécution d'opérations récursives, c'est-à-

dire de fonctions s'appelant elles-mêmes. Ceci est possible grâce

à l'emploi de piles ou de listes auto-allongeables dont seule la tête

est accessible. Le but recherché n'apparaît pas toujours clairement,

à l'étude, car on se rend compte que SLIP étant un des derniers langages

à avoir été créés, il regroupe de nombreux perfectionnements, qui con-

courent à des buts différents. Une étude succincte des autres langages

de listes permettra de mieux se rendre compte de l'utilité de chaque

particularité.

- 9 -

2-1 - IPL V

IPL V paraît actuellement être un des langages les plus utilisés

aux U.S.A. Cfest vraisemblablement parce qu'il est l'un des plus anciens

langages de listes. Il est dâ essentiellement aux travaux de A. NEWELL,

TONGE, FEIŒIEBAtJM, GKEEN, MEALY, SHAW, SIMON.

Son expression par instructions directement interprétées par la machine,

est assez simple, car les fonctions de base ne sont pas très éloignées du

langage machine. Il gère les mémoires au moyen de piles et listes. Utilisé sur

IBM 7044, il conduit à une structure de mots du type :

Q LIEN SÏMB

Espace libre

Chargeur

structure identique à celle que nous utilisons pour SLIP sur 7094.

Lorsqu'un programme est chargé en machine, il reflète la structure suivante :

L'interpréteur chargé avant le programme,

comprend un interprète proprement dit,

qui reconnaît les expressions et les

exprime en fonctions de base en langage

machine, le stock de fonctions de

base, le moniteur, qui donne des rensei-

gnements sur le déroulement du programme

et les incidents, et le chargeur, qui

emmagasine le programme et les pro-

cédures utilisées qui ne sont pas

fonctions de base. Le reste est espace

libre, qui sera utilisé au cours du

traitement, ces mémoires étant allouées

uniquement à ce moment.

Interpréteur -, Moniteur

Ponctions de base

Interprète

La machine lit des instructions en liste qui sont, d'une part, le

programme écrit sous forme de liste, d'autre part des données sous forme

de listes à traiter. Les symboles figurant sur ces listes sont de trois

types :

Page 11: SLIP: Langage de listes symétrique Applications

- 10 - - 11 -

Symboles régionaux (R 3496 à la disposition du programme

Symboles internes à la disposition de la machine

Symboles locaux (9-1 ) servant aux connections éphémères.

P est le préfixe d' opération - Q le préfixe de désignation.

SYJffi contient un symbole ou un lien avec

LIEN contient l'adresse de la cellule

Exemple

de liste

de données

L1 '

S1

Nom

L1

9-1

S5

PQ

-*•

J177

Exemple

d'instructions

SYflB

S1

S5

S12

9-1

S7

A5

A12

S12

PQ10

20

11

20

• **

9-1

SXMB

L1

R1

WO

WO

R1W1

une sous-liste.

suivante ou une "fin".

LIEN

-*

0

0

A5

L'absence de lien est

un bien pour l'instruction

suivante

_, 7"* /

> /^ /A12

LIEN

0

L1 étant la liste

précédente

P et Q caractérisent les opérations à effectuer.

Le programmeur a accès à un registre de communication HO qui est

agencé en pile, c'est à dire où on n'a accès qu'au sommet. Les portions de pro-

gramme sont appelées procédures et agencées en listes, (fig. I.1.2.2.)

ProcédureJ77

9-2

9-1

PQ40

20

70

12

11

70

30

30

SYMB

wovo

J60

9-1

HO

WO

J2

9-2

WO

HO

Cette procédure teste si lesymbole (o) est sur la liste (l)

0 Fig. IJ.2.2.

Contrairement à LISP pur, IPL renvoie en "mémoire disponible" les

symboles (mémoires dont le programme n'a plus besoin. Ceci se fait par des

procédures (J71) qui renvoient les cellules en question dans la liste

d'espace disponible (H2). Le programmeur a la totale responsabilité de l'ef-

facement des listes devenues inutiles. Le renvoi de listes entières d'une

seule opération est possible. L'oubli de renvoyer des cellules inutiles

conduit à une diminution de l'espace libre potentiel restant.

Le rangement en mémoires auxiliaires est possible quand l'espace libre

est complètement utilisé. L'appel d'une liste déjà rangée déclenche son rappel

automatique.

Une particularité d'IPL est qu'il accepte les structures bouclées,

cycliques. Lorsque l'on veut toutes les adresses des mémoires de la structure

on utilise des marques, logées en tête de liste, qui préservent les symboles

locaux (têtes de sous-listes) et on les loge dans des piles, évitant ainsi

de passer plusieurs fois dans la même liste :

Seul

9-5 est ainsi autorisé.

9-1 est interdit. (— = transfert de contrôle).

Si le programme utilise des données, on les loge dans des termes de

données dont la zone P contient une valeur 0,1,2,3 suivant le type de donnée.

Page 12: SLIP: Langage de listes symétrique Applications

""& A-a"

- 12 -

Si la donnée est longue, on en fait une liste, de longueur quelconque dont on•4*OO"4* V»Q T *} "f*"! Y .testera la un !

s'écrira :PQ

Liste T1

9-1 21

9-2 21

9-3 21

se différencient par

TERME DE DON NEE

1 2 3

SITCB LIEN

0

IPL n'est pas un langage prévu9-2 ' pour le calcul numérique, aussi9-»3 0 interprète- t-il les symboles,TERME avant de leur affecter uneDE DON ;, ... .valeur, qu'il trouvera dans une

liste en correspondance avec les

symboles. Les termes de données

les contenus des zones P et Q (entier - flottant -

octal - alphanumérique) ce qui fait que la zone contenant la donnée elle-même

est tronquée et doit donc être d'un type spécial, uniquement traitable par

IPL. Ceci est évidemment plus long qu'en SLIP où les données peuvent très

facilement être des nombres. Les opérations numériques en IPL ne se feront

qu'après interprétation des symboles d'opération, et procédure de calcul,

car on ne dispose pas du support FORTRAN, analysant ces symboles et réalisant

automatiquement les opérations arithmétiques, grâce à son compilateur.

En IPL, pour représenter l'information, on la lie à un symbole en

utilisant les têtes de liste. On crée une liste de propriétés, un peu

analogue a celle de LISP et à la "liste descriptive" de SLIP.

Par exemple une distribution de bridge P A D 10 4

G R 6 3

K D V 10 3

T A 2

peut être représentée en liste, liste à laquelle on attache une liste de

propriétés donnant le compte de points, la place, la vulnérabilité.

(Fig. I.1.2.4.)

'ii*îs

1

9_"'";

*.*

ï/

|

3

1ia

*""?''y-

}-.^a'iJ

p*i

$S

1

I1;1

iiiî1i1ïi

iin.S

i-&

1&iÉît2mba

XI 9-1 9-1 0 fig. I.1.2.4

P A VOMB

P D N16P 10 VD13 Cette liste de propriétés est bien

P 4 NI liée a la tête de liste de cartes.

C R VPLA " sxiste des fonctions (procédu-

C 6 NSUD res * pour rechercher la valeur des

C 3 VUL

K D NON

K V

K 10

K 3

T AT 2 0

Les listes de

attributs de la liste. Le nombre

Q de points (16) est la valeur de

l'attribut VOMB de la liste XI.

La liste descriptive est elle-

même descriptible (tête de liste :

vide). Ceci est très proche de SLIP

données peuvent être bâties en structures, mais

ces structures ne peuvent pas être circulaires. Elles sont composées de

termes de données et de symboles locaux de sous-listes.

Les différents types de mémoires sont :

Tête de liste XI

Mémoire de liste 9-1

Mémoire de terminaison

Mémoire de rangement

Listes piles : ce sont

NOM SYMB LIENXI 0 9-29-2 S 2 9-3

9-3 S3 0

000 000 000 000

vide Al 0 0

contient B3 Al B3 0

des piles associées aux mémoires de rangement où

on vient emmagasiner en pile les symboles successifs, en ayant uniquement

accès à la tête de pile, c'est-à-dire la mémoire de rangement. On préserv*

par descente de toute la pile d'un cran. On restaure par remontée de tout<

la pile d'un cran. (fig. 1.1.9.5.)

Page 13: SLIP: Langage de listes symétrique Applications

NOM PQ

1) W3 vide

2) W3 — S5

2) Préserver

4) Bl — W3

5) Préserver

6) 01 — W3

7) Restaurer

VT3

SYMB

0

S5

35S5

BlS5BlBlS5GlBl35

Bl35

LIEN

0

0

0

0

0

0

0

fig. 1.1,2.5

Lors de l'exécution, 1!ordre normal des instructions est la

séquence, tant que l'on rencontre des symboles en partie SYMB. Si le

SYMB est le nom d'une procédure, on transfère le contrôle à cette pro-

cédure qui peut en faire autant et ainsi de suite jusqu'à ce que l'on

soit revenu au point de départ. On s'arrête seulement à une mémoire

de terminaison du programme principal. Cependant aucune différence

n'existe entre Programme Principal et Sous-programmes au point de vue

de la présentation.

Pour communiquer les arguments d'un programme à un sous-pror

gramme ou d'un sous-programme à un autre, le programmeur doit les mettre

dans des cellules de communication agencées en piles, dont l'utilité

est analogue à celle du commun en FORTRAN.

La récursivité est aisée, car au moment des appels de sous-

programmes les adresses de retour sont logées dans des piles et on ne

revient au programme principal que quand les piles sont vides. Les

programmes sont automodifiables, car des symboles peuvent être extraits

de données et placés dans la liste programme, permettant ainsi un aiguil-

lage en cours de traitement, car la structure des données et des program-

mes est similaire.

- 15 -

IPL apparaît donc comme un système très complet, rapide,

efficace car il utilise son propre interpréteur, permet des procédures

récursives, dispose d'une réserve constituée en liste qu'on peut res-

taurer et gérer au mieux. Il est le plus près des "listes" car les

programmes chargés sont agencés en listes, les symboles sont agencés en

listes, les données sont agencées en listes. Il est sûr, car la majo-

rité des zones mémoires sont agencées en piles ou listes. Il paraît

donc particulièrement adpaté à la manipulation des symboles, à la

recherche lexicographique, à l'apprentissage. Nous verrons que SLIP

s'est inspiré de plusieurs de ses mécanismes. On peut reprocher à

IPL l'absence de noms de procédures mnémoniques.

Page 14: SLIP: Langage de listes symétrique Applications

- 16 -

2-2 - LISP

Le langage de programmation LISP a été mis au point aux

alentours de I960 par l'équipe de Mac Carthy au MIT. Il a pour base

la description de calculs par des expressions symboliques. L'idée

primitive de listes, qui a permis son écriture repose sur des travaux

antérieurs de Newell, Simon et Shaw relatifs au langage IPL (Information

Processing language). Il a été utilisé à des travaux de manipulation

d'expressions algébriques : differentiation, intégration...

Il repose sur la notion d' "atomes1,1 analogues aux variables

définies en ALGOL, et sur celle de "S expression". Il représente com-

munément une liste par la forme avec parenthèses (A (B C) D) . Ses

fonctions de base sont car(x) et cdr(x) qui extraient d'une part l'atome

de gauche d'une S expression (x) qui n'est autre chose qu'une liste, et

d'autre part tout ce qui n'est pas l'atome de gauche.

Si X = (SI S2 SJ S4)

car(X) = SI et cdr(X) = (S2 S? S4)

cons(x,y) où x et y sont des S expressions x = fsi)et y = (S2 S3 S4)

cons(x,y) = (SI 32 S3 S4)

II repose aussi sur des prédicats

atom(x) qui est vrai si x est un atome,

faux dans l'autre cas.

eq(x,y) qui est vrai si x et y sont des atomes égaux«

faux dans l'autre cas.

Avec ces bases on construit des fonctions plus compliquées :

Par exemple : append (x, y) qui réalise (SI S2 S3 S4 S5)

avec x = (SI S2) et y = (S3 S4 S5)

qui s'écrira :

si x = null alors append = y

sinon cons (car (x), append (cdr(x),y))

ce qui est une fonction recursive et nécessite un compilateur adapté.

9.

it-1

mM

sS

mf

- 17 -

La représentation machine de ce langage se traduit par des struc-

tures de la forme

Ul D

B

(adresse) (A (B c) D)

où A, B, C, D sont des pointeurs vers les mémoires qui pour la machine

représentent A, B, C, D. Ces cellules contiennent donc des adresses machines,

qui sont extraites de la réserve. La réserve (free storage) est un tableau

de mémoires consécutives où on connaît l'adresse de la première non utilisée.

Ce sera elle qui sera appelée, ce qui fait qu'en LISP comme dans les autres

langages les mémoires voisines d'une liste ne sont pas consécutives en

mémoire.

Quand une mémoire n'est plus utile, on la renvoie mais elle ne

devient pas liée au reste de la réserve comme en SLIP. Ainsi quand la tota-

lité des mémoires sera épuisée-, on devra procéder à un ramassage des cellules

inutiles (garbage collection) pour récupérer toutes les mémoires disponibles

ramassage généralement suivi d'un tassement des mémoires utilisées.

Chaque atome est muni d'une liste de propriétés qui permet de loger

des renseignements et dont le pointeur est logé à la place du symbole. Une

extension de ce langage a été faite en ALGOL, ce qui a donné le LISP ALGOL.

Dans cette application, la réserve est constituée d'un double tableau

TCAR TCDR

-1 1 dont TCAR (l) + TCDR (l) formeront

un atome X :

car (X) —* TCAR —*• P1

élément XP1 P2P1 peut être une adresse

(pointeur) ou un symbole.

P2 pointe vers le prochain élément de la liste d'éléments.

Page 15: SLIP: Langage de listes symétrique Applications

- 18 -

Une fin de liote ou de sous liste se caractérisera par le fait que

son pointeur P2 qui pointera vers la mémoire 1

Une liste de propriétés se caractérisera par sa partie P1 égale

à -1. Si BC est un atome, sa liste de propriétés sera :

I >1 >

PCDir^teur vers l'atome BCr

-1—

^ B -J r 1 S.* *-> .jj u | ^t .La liste (A(BC,D)E)

se représentera

atomereprésentant A

atomereprésentant E

sous liste (BC,D)

atome représentant D

B

On commence l'exécution d'un programme par une procédure "préparer"

qui crée la liste de l'espace disponible, reliant entre elles les mémoires

libres, qui au départ sont contigues. Lorsque la place manque, par une

procédure "libérer" on peut raccrocher à cette liste disponible une ou

plusieurs listes devenues inutiles, ce qui a pour effet de les effacer mais

aussi de libérer les listes de propriétés et sous listes. Ceci correspond au

**••_

- 19 -

mécanisme de ramassage de cellules inutiles (garbage collection) de LISP 1.5

LISP ALGOL permet une évaluation aisée des formules symboliques ce qui lui

confère une supériorité certaine sur plusieurs autres langages. En

LISP 1.5 la liste de propriétés peut contenir la valeur numérique de la

variable. En LISP ALGOL on crée un tableau TREEL pouvant contenir les valeurs

numériques d'un certain nombre de symboles, directement lié au symbole. On

évalue la valeur d'une expression par un programme interprétatif, qui teste

les opérateurs et opère sur les valeurs TREEL liées aux symboles. Ceci est

réalisable en tous langages. La procédure est une proécédure recursive.

Page 16: SLIP: Langage de listes symétrique Applications

- 20 -

I - SLIP SÏMETRIC LIST PROCESSOR Langage de listes symétrique

SLIP est un langage de traitement de listes essentiellement symétrique

SLIP est un jeu de sous programmes permettant de traiter des mots machine de

façon à leur donner une structure de liste. La version initiale de ce langage,

mise au point en 1963 par J. WEIZENBAUM au M.I.T. et à la General Electric,

était un jeu de sous programmes en langage machine FAP, travaillant sur un

ordinateur équipé d'un compilateur FORTRAN. De manière à rendre ce langage

plus clair, et plus didactique, il .fut par la suite exprimé sous la forme

de sous programmes FORTRAN. Mais si ce mode d'expression, exprimé dans un lan-

gage hôte, est commode, il présente un nombre certain d'inconvénients, tels

pertes de temps et difficultés d'interprétation de données externes en COUTE

de traitement. On est donc logiquement conduit à penser qu'il est rentable

de construire un "interpréteur" SLIP, ce qui a été fait au U.S.A«, inter-

préteur qui traduit directement les instructions SLIP classiques en opé-

rations machine, et permet de manipuler concurremment symboles et nombres,

d'introduire des données, ou de traiter numériquement des formules calculées

symboliquement, ce qui était difficile avec SLIP FORTRAN.

1-1 - CARACTERISTIQUES FONDAMENTALES DE SLIP

La version la plus courante de SLIP, celle sur laquelle nous

avons travaillé, utilise un certain nombre de fonctions de base :

les "primitives". Ces fonctions primitives travaillent au niveau du

découpage machine des mots. Suivant que la machine utilise des mots

de 36 ou de 48 digits, que les mots sont découpés ou non, seules les

fonctions de base varieront.

L'ordinateur que nous avons utilisé, un IBM 7094, utilise des

mots de 36 digits binaires, découpés suivant le modèle suivant :

3 A 181921

digit designe AGD

- 21 -

Une zone d'identification ID digits de 1 à 3 avec ou sans digit de signe

Une zone décrément DEC digits de 4 à 18

Une zone index RX digits de 19 à 21

Une zone adresse ADD digits de 22 à 36

Ces zones ont été utilisées surtout les 2 premières et la 4ème

dans les fonctions primitives.

LSG (LNKL) liaison gauche (link left) est un pointeur vers la cellule

précédente

LSD (LNKR) liaison droite (link right) est un pointeur vers la cellule

suivante

ID identification est une marque donnant le type

de cellule.

Un mot SLIP est composé de deux cellules (un doublet) dont la

première contient en zone ID une marque, en zone LSG l'adresse de la

cellule précédente, en zone LSD l'adresse de la cellule suivante. La

seconde cellule est une cellule de donnée ou contient un compteur de

niveau, ou l'adresse d'une liste descriptive ou l'adresse de la tête

de liste dans le cas du suiveur (reader),

Différents types de cellules

Cellule normale

ID = 0

0 LSG LSD

Donnée

LSG pointeur gauche (précédente)

LSD pointeur droit (suivante)

Cellule de tête

ID _ 2

2

M

DERN

D L

SOMMET

CN

DERN pointeur gauche (précédente =dernière)

SOMMET pointeur droit (suivante =sommet)

M : marque de la liste ou des listes

DL : pointeur vers la liste descriptive

CN : compteur de niveau (accrochage de SL.

Page 17: SLIP: Langage de listes symétrique Applications

- 22 -

Cellule d1accro-chage

ID = 1

1 LSG

TETE

LSD

TETE

LSG-LSD pointeurs gauche et droit

TETE pointeur vers la sous liste SL

sous forme de nom de liste

Cellule desuiveur

ID = 3

3ADD.COUR

5ETB

PUT SUI

CN

ADD. COUR pointeur vers la celluleétudiée

PUT SUI adresse du mot suivant duchercheur

TETE pointeur vers la tôte de la listecourante

CN compteur de niveau (n° de l'étagede SL)

Nom d'une cellule ROM

Cellule de nomde liste

TETE TETE

NOM pointeur vers la cellule deliste NOM

TETE pointeur vers la tôte de liste

Cette cellule est le nom ou unpseudonyme

Construction de listes

SLIP permet de réaliser des listes symétriques en ce sens que

d'une cellule on peut se déplacer vers la cellule précédente jusqu'au

sommet, ou vers la cellule suivante jusqu'à la queue. Une liste se

présentera donc suivant la fig. 3

L(2)

L(3)

L(4)

i

3f

1

I ^

12 L(4) L(2)-

10 I L L(3>

i

0 1(2) L(4)-

10 L(3) T. •-JJ

6-

*J

fr-1

LA

Fig. 3

Une sous liste ne diffère en rien d'une liste. Elle est elle même

une liste. Tant qu'elle n'est pas accrochée à la liste principale,

ses différentes zones sont identiques. Une structure de liste, après

accrochage aura la forse suivante : (Pig. 4).

Une liste descriptive peut être accrochée à une liste (ou à une

sous liste) de façon à fournir un certain nombre de caractéristiques

(valeurs dépendant de certains symboles ou attributs. Une liste

descriptive peut contenir par exemple le symbole AGE et sa valeur 25,

le symbole FILS et le nombre 2. Elle est accrochée à la tête de liste,

de façon spéciale, qui permet do xffî pas la confondre avec les autres

listes, ce que sa structure ne permet pas, car c'est celle d'une

liste ordinaire (fig. 5).

Page 18: SLIP: Langage de listes symétrique Applications

Liste L

L2

L3

ACC

Liste L

- 24 -

2 14 L2 -

0 L 1 L3>t_

0 L2 ACC•—

TETE Sous liste LA

SOMMET

1 12

LA, — — t,

14 *-

,LA

2 LM LA2-

1

0 LA LA3..

0 LA2

compteur deniveau à 1(1 accrochage)

LA2

ACC QUEUE

LAS LA •

LA3

Chaîne SL peut avoir d'autresSL

Fig. 4

cellule L1

2 QUEUE

DL PI

^

SOMMET*

if•

^

,liti

Liste des

2 DL5 DL2 -

0 D _

ACE

LN J

. 5

- 25 -

Suiveur

Un suiveur (ou chercheur ou "reader") est une liste spéciale,

capable de suivre une structure, en descendant dans les différentes

sous listes, mais toujours capable d'en remonter, car le suiveur met

en réserve les adresses de retour. Le suiveur LCH pointant vers la

cellule LA (3) de la structure de la fig. 4 aura la structure

suivante : L liste principale LP

LA sous liste SL

LCH | . | .1 1

LA tête de S]L

T LA3

LA

LCPNT.

1

ACCL tête de LP

3 ACC

L

LCPNT 0

0

LCH2 pointeur vers la2èm8 cellule

CN = 1 : on est descendude 1 niveau

LCPNT = 0 pas de celluleaprès

CN = 0 liste principale

Utilisation des marques

II est possible de marquer une liste ou une liste et toutes ses

sous listes par un nombre de 1 à 7 en partie ID de la 2eo8 cellule du

doublet. Cela penset de reconnaître les sous listes accrochées à une

liste prJJicipale donnée, ou bien d'éviter de décrire indéfiniment

une structure bouclée

Sommet

2

H

QUEUE

DL

SOMMET.

i

H s Marque

Page 19: SLIP: Langage de listes symétrique Applications

- 26 -

La réserve

Un des avantages principaux, du traitement de listes est la post

désignation de l'adresse d'une cellule, en ce sens que la cellule N de

la liste L n'est connue que par le nom H$ l'adresse véritable d@

la cellule (doublet) n'est fixée que quand on l'utilise pour la

première fois, à sa création. N contient alors son adresse. Il faut

donc disposer d'un certain nombre de doublets disponibles, ce qui est

réalisé par ce que l'on appelle "Liste d'espace disponible" (List

of available space. LAVS). C'est une zone réservée en début de pro-

gramme, agencée en liste simple, non symétrique de telle façon que

toutes ces cellules de la réserve soient liées entre elles. On peut y

accéder par une cellule mise en "coaaun" CHEF "cellule de référence"

AVSL (Available space link) qui contient l1'adresse de la première et

de la dernière cellule de la réserve

c(D 0(2} C(H)

CHEF

Lorsqtffl l'on désire utiliser une cellule, o'est à dire la prendre

à la réserve, on "décroche" la première cellule de LAVS et on donne à

CREF l'adresse de la suivante C(2) au lieu die C(l). Ainsi CHEF pointe

toujours vers les extrémités de la réserve. Cette réserve doit avoir

des dimensions suffisantes sous peina d'arrêt du traitement, ce qui se

fait avec impression d'un diagnostic. Toutes les cellules (tête de

liste - accrochages - cellules courantes — suiveur - description list)

y étant ainsi prélevées.

i

3

1%

i. w

Pour pallier cet inconvénient, on renvoie en réserve les cellules

dont on n'a plus l'usage : listes devenues inutiles, listes des-

criptives sans symboles j suiveur dont le travail est terminé, cellule

d'accrochage dont la liste a été renvoyée .... Pour réaliser ceci, on

accroche en queue de réserve la cellule en question (ou les cellules

en liste) et on eodifie le pointeur gauche de CREF. On remarque en

effet que le LSD des cellules de la réserve contient l'adresse de la

cellule suivante, de même que celui d'une cellule d'une liste contient

l'adresse de la cellule suivante. On peut ainsi renvoyer en réserve

en une seule fois une liste entière dont les cellules seront liées. Il

suffit que la précédente queue de réserve pointe vers le sommet, et que

CHEF pointe vers la queue de liste dont on aura précédemment annulé

le LSD. On obtient facilement les adresses de la queue et du sommet

qui sont toutes deux en LSG et ju,J) de la tête de liste.

Renvoi des sous listes entières

Nous avons vu qu'il existait dans la cellule donnée des têtes de

listes, une zone intitulée compteur de niveau (Level counter). Cette

zone garde trace du nombre d'accrochages de chaque liete, c'est à

dire du nombre de fois qu'une liste donnée est faite sous liste d'une

autre liste. Ce compteur de niveau croît de 0 à N. Il sert essentiel-

lement à savoir si une liste (sous liste) est utilisée à l'instant

considéré. Puisqu'il faut disposer du plus grand espace disponible

possible, on a intérêt, si une liste n'est plus utile (c'est à dire si

son compteur est à zéro (O)) à la renvoyer en réserve0 A chaque fois

qu'une sous liste d'une liste devient inutile, on la renvoie en ré-

serve par un sous programme appelé IEFLST qui diminue son compteur

de 1 et renvoie la liste si le compteur est à zéro, renvoyant aussi

la tête de "liste descriptive" si elle existe. Il est possible de

renvoyer uniquement le corps de liste par un sous programme MTLIST

ainsi que de renvoyer la "liste descriptive" par une fonction IRADLS.

Page 20: SLIP: Langage de listes symétrique Applications

- 28 -

II n'existe pas de sous programme standard permettant de ren-

voyer -une structure entière en réserva, mais ceci est aisément pro-

grammable. Cependant ce problème se pose rarement, car il est plus

souvent question d'augmenter la taille d'une liste ou d'une structure,

que de l'effacer. Cependant, quand une structure devient globalement

inutile on renvoie le corps de la liste principale en réserve (par

IEPLST) on renvoie la tête de liste descriptive si elle existe, et

on renvoie la tête de liste (car liste principale —£ compteur de

niveau = C-). Les cellules d'accrochage se trouvent donc dans la réserve.

Quand on a besoin de nouvelles cellules on les teste au cours de

l'appel par RCELL. Si la cellule contient le nom d'une sous liste, on

applique à ce moment la procédure IEPLST à la sous liste en question

et ainsi de suite.... ce qui résout le problème de l'effacement d'une

structure»

1-2 * DESCRIPTION DU SÏSIEHB - LES PROCEDURES

SLIP FORTRAN offre la possibilité de faire des fonctions ou des

sous programmes qui utilisent les fonctions de base, puis qui utilisent

les fonctions déjà écrites, ce qui simplifie considérablement le travail

de l'opérateur, qui par une simple instruction d*™* le programme

principal peut réaliser une suite très compliquée d'opérations plus

simples.

1-2-1 - Fonctions primitives

Permettent d'extraire une partie du contenu d'une cellule

ou de loger cette partie dans une cellule

L = LSG (A) : contenu de la partie décrément de la cellule A

placé en partie décrément de L

L « LSD (A) : contenu de la partie adresse de la cellule A

placé en partie décrément de L

L = ID (A) : contenu de la partie préfixe de la cellule A

placé en partie décrément de L

Z = CONT (L) : contenu de la cellule dont l'adresse est en partie

décrément de la cellule L placé dans la cellule Z

LA « INHALT (L) :même fonction, mais de type entier au lieu de

flottant

INTRDD (NAfL) place le contenu de la cellule NA dans la cellule L

INTRDI (NA,A) place le contenu de la cellule NA dana la cellule

dont l'adresse est en partie décrément de A

INSDIR (D,N,M,CELL) loge D en partie préfixe (iD)

N en partie décrément (LSG)

H en partie adressa (LSD)

de la cellule CELL

INSIND (D,N,M,A) loge les mêmes quantités dans la cellule dont

l'adresse est en partie décrément de la cellule A.

Pig. I.2.1

Page 21: SLIP: Langage de listes symétrique Applications

L » ID (CELL)

H « LSG (CELL)

H B LSD (CELL)

A

B « COHT (A)

A

(Cf Dy B, A)

Appel IKSDIR (C, D, B, CELL)

B

CELL > t A

Fig. 1*2,1.Appel IHTRDD (B, CELL)

Appel INTRDI (B, A)

Dans ces deux derniers sous-programmes, le fait de remplacer

une des données par -1, laisse intacte la partie correspondante.

INSIND (-1, -1, M, A) ne modifie que la partie adresse.

Ces particularités d'écriture sont dues au langage FORTRAN et à la

méthode des listes. Lorsque l'on fait INTRDD (NA, L) NA représente

la donnée logée dans la cellule que le compilateur a attribuée au

symbole NA. D'autre part, une liste dont on connaît la structure

n'est localisée que par son nom, ou le nom de ses cellules, qui ne

sont pas des cellules de la liste. (Fig. I.2.2)

- 31 -

Les ordres LA = LISTE (9)

LB = NVQU (Dl, LA)

réalisent L Add LA-...-I ...

LA.,..!

^ 2

0

1I

1

ID1

Pig. 1.2.2,

où LA est une cellule connue, identifiée à la compilation qui

contient l'adresse de la tête de liste sous forme de nom de liste^

adresse inconnue du programmeur, car fournie au cours du traitement.

De même pour LB qui contient l'adresse de la cellule accrochée à la

tête de liste, dont la cellule"donnée"contient Dl.

>2-2 - Création de la réserve. Liste d'espace disponible

On dispose au départ de la procédure d'un bloc de mémoi-

res contenant zéro, dont on connaît les adresses extreœas.

Sans modifier l'implantation de ces cellules (ce qui est

physiquement impossible) on va les lier entre elles, en une

liste non symétrique par groupes de 2.

Etat Initial

I l

II AddfTT 1

AddA

1 * J v iL | OOOOOC] | | || |Ad4 F |

P IB o

| Add | | II Add CC B A,

1

jàdd B

t

CHEFPic I.2J2.1,

Page 22: SLIP: Langage de listes symétrique Applications

Jtë£:~&&LJsï&&i™s^

et on crée une cellule spéciale CHEF (cellule de référence) qui

contiendra les adresses des deux extrémités de la réserve (premier et

dernier doublet). C'est au sous-programme INITED qu'échoit ce travail,

Ce sous-programme crée en plus 100"listes publiques"vides, (100

doublets de la forme2 1 ! T

qui pointent vers leur propre adresse, mais dont les noms

AddA Jpointent vers les cellules créées et se trouvent dans la partie

commune de la machine (COMMUN) référencés de X(l) à X(lOO)). Ces

listes spéciales sont celles qui plus tard serviront à loger et

récupérer adresses et paramètres dans les traitements récursifs.

Appel d'un doublet - utilisation de la réserve

Quand le programme a besoin d'un doublet, il le demande à la réser-

ve, qui lui fournira l'adresse de la queue de réserve.

Soit N = NUCELL(Z) N prend comme valeur l'adresse de la der-

nière cellule de la réserve, connue grâce à CHEF soit A

\AddA [—_»_.±, — . J f«La réserve doit alors remonter d'un cran, et c'est CREF qui prendra

en partie adresse l'adresse contenue dans A soit celle de B. A est

ainsi utilisable et on connaît son implantation en machine. NUCELL

n'est pas appelé directement, mais par l'intermédiaire des fonctions

LISTE, IMMDRT, IMMGCH.

Création de listes (Têtes de listes)

Quand on veut créer une liste, on appelle une cellule par la fonction

LISTE : LA * LISTE(9)

LISTE appelle une cellule par NUCELL et donne son adresse à la fonc-

tion. Cette adresse est mise sous forme de nom de liste dans IA

LA AddA AddA

et la cellule A devient tête de liste vide.

S$

1

*ta®

- 33 -

Si on appelle LISTE (IB) au lieu de LISTE(9) la liste sera

ineffaçable c'est-à-dire qu'on ne pourra pas par la suite la ren-

voyer en réserve car elle contiendra en partie adresse de la cel-

lule de donnée un 1. Son compteur de niveau sera al. De plus

IB sera aussi nom de la liste (pseudonyme). On aura alors

IB M—t-

2 i l *

fig. I.2.2.2

-2-3 - Création de listes - introduction des données

IMMGCH - IMMDRT

Ces fonctions rajoutent à droite ou à gauche d'une cellule

d'une liste, ou de la tête de liste (vide ou non) une cellule, dans

la donnée de laquelle on peut mettre un nombre, une adresse ou un

symbole. Ceci soulève tout de suite le problème de l'uniformité des

données. Toutes les données doivent appartenir à la même catégorie,

sous peine d'avoir à identifier chaque cellule. Soit la liste LA

comprenant deux cellules LA(2), IA(3). Rajouter une cellule entre

LA(2) et LA(3) se fera par appel de :

IMMDRT(D, LA (2)) : immédiatement à droite de LA(2) ou

IMMGCH(D, IA(3)) : immédiatement à gauche de LA(3)

avec D « donnée. On aura donc

* IA3 IA2*LA

LA(2)

IA(3) * LA2

9 IA

XLA3*.

LA

IA(2)

0 LA3 LA2 *i

IA

LA Nouvel IA2 LA3

LA O; NOUVB LA

Fig. I.2.3.

Page 23: SLIP: Langage de listes symétrique Applications

X -i Ws.Uw s- ^ i' E-r" ^ 1'- -' ™' ^ !-'1'"; M'X&.-l.^tvlffhnls- wii.iBiB îîrùi,. »!1!,» » ™,*, 4 »«**V" '™J*"'*'*Ï^ ..rtl aV *; ;*, !»™''"' ^ *rt'™™™A ,i*!.fflJ|lj»s..' ' .ï-jW •-••nj- ..s...-^ ..

Des fonctions NVTT, NVQU (nouvelle tête, nouvelle queue) réalisent

la même opération en tête ou en queue de la liste.

1-2-4 - Substitutions

SUBST, SUBSTT, SUBSQU permettent de substituer à la donnée

existant dans une cellule, une nouvelle donnée, la fonction prenant

comme valeur l'ancienne donnée.

Ex. : NV = SUBOTT (Dl, LA(2))

Si l'ancienne donnée était D on aurait NV = D et Dl serait la donnée

de la cellule LA(2).

Insertion d'un corps de liste dans une liste

Des fonctions INLSTD, INLSTG insèrent dans la liste dont A est une

cellule, à droite ou à gauche de A, le corps de la liste M, rendant

M vide - la fonction prend comme valeur M. La liste de A est donc

rallongée de la longueur de M.

Division d'une liste - détachement d'un groupe de cellules

Les fonctions NULSTG, NULSTD enlèvent à la liste L toutes les cellules

à gauche ou à droite de la cellule A (tête non comprise) et en font

une nouvelle liste dont le nom est donné par la valeur de la fonction

Avant

NV

NV

NULSTD(A,L)

NOUV

Apres

NOUV

Fig. I.2.4,

Ces fonctions prennent comme valeur le nom de la nouvelle

liste des cellules détachées.

i*i E ^ kài v .i!LW ^-t^^^^ffi^^.;^ j-y pi • v j»f ' - ri ''-^r: ''' s-1.- -- - ^ : S ^ ^ i i

Changement de mode

Le FORTRAN entraîne un certain nombre de contraintes, dues à la

dénomination des symboles, flottant en entier. Les fonctions com-

mensant par une lettre de I à N sont du type entier. Les autres

du type flottant. On ne peut donc réaliser :

NV = CONT(LA(2))

CH = LSG(LA(2))

On a créé pour cela deux fonctions REEL(R) et INTGER(l) qui sont

des pseudo opérations, n'affectant en rien la valeur de leur para-

mètre qui devient valeur de la fonction. On peut ainsi écrire

NV = INTGER(CONT(LA(2)))et

CH = REEL(LSG(LA(2)))

INTGER prenant la valeur CONT(LA(2)) et REEL celle de LSG(LA(2)).

1-2-5 - Renvoi de cellules en réserve

C'est le processus inverse de l'appel d'une cellule par

NUŒLL. L'ordre des cellules dans la liste d'espace disponible a

été modifié car de nombreuses cellules ont été appelées et sont donc

liées les unes aux autres, de façon assez complexe, mais ont toujours

les mêmes emplacements en machine. La réserve n'est pas vide.

CHEF pointe toujours vers F

rT-VrS [

OOOJ

I I

,L_L_l

H

I I I LU

I I I LUh-F

première collule disponible

CHEF

Page 24: SLIP: Langage de listes symétrique Applications

""Ô'srf f4 , i™ak

Supposons que l'on veuille renvoyer la cellule K, connue par son

nom NK | Add K On écrira Appel RCELL(NK). Cette

fonction va faire de K la dernière cellule de la réserve se substi-

tiant à F. Pour cela on va mettre 0 dans K (annuler ses liens) et

faire pointer F vers K (car on connaît l'adresse de F par CREF)

K

Add K | CREF va être modifié et pointer vers K lui aussi

fig. I.2.6.00000 CREF Add K •—

K a donc bien été détaché de la liste où il figurait, et accroché

en queue de réserve. Mais la fonction RCELL est peu utilisée direc-

tement; par contre elle est très utilisée indirectement :

ELIM, EJTT, EJQU réalisent cette opération mais préservent

la continuité de la liste, en liant les deux cellules voisines de NA.

De plus, elles prennent comme valeur la donnée de la cellule renvoyée.

Elles testent aussi NA pour voir si ce n'est pas une cellule de tête,

ne la touchant alors pas.

Appel ELIM(NA)NVNANT

r .

p

0 N H

N A

NAHéserve

£1

NVNT

1,1

b t

I 0

Pig. I.2.7.

La fonction MTIZST renvoie à la réserve le corps de la liste

si la liste n'est pas vide. Elle prend comme valeur le nom de la

liste. Si la liste est vide MTLIST prend la valeur zéro.

La fonction IEFLST que nous avons déjà partiellement étudiée,

utilise MTLIST pour éliminer le corps de liste. Si le compteur de

niveau de la liste descriptive est à zéro, elle élimine aussi la

tête de la liste descriptive puis la tête de liste LA si son compteur

est aussi à zéro. Le corps de liste descriptive sera éliminé ultérieu-

rement.

La fonction IEFCH efface la totalité du compteur de niveau.

La fonction IRADLS efface la liste descriptive L et met

son pointeur à zéro, grâce à la fonction MTDLST qui élimine le corps

de la liste descriptive. .

Dans cette procédure de renvoi de listes en réserve nous

n'avons pas parlé des sous-listes. Lorsqu'on renvoie en réserve

une liste principale (dont le compteur est à zéro sauf si elle a

été faite indestructible) celle-ci peut avoir de nombreuses sous-

listes, qui lui sont accrochées grâce à des cellules d'embranche-

ment, ppi nLÎT: H" LBf

1 1— Sous liste LBCes cellules sont aussi renvoyées avec les autres. Mais dans la

fonction NUCELL existe un processus de renvoi des sous-listes :

Lorsqu'on appelle pour l'utiliser, une cellule qui a été renvoyée,

et qui soit une cellule d'embranchement, on applique la fonction

IEFLST à la sous-liste dont le nom est dans cette cellule. La

sous-liste sera donc renvoyée elle aussi à ce moment, si son comp-

teur de niveau n'est pas supérieur à 1 et ainsi de suite. Pour

éliminer le corps de liste descriptive on utilise aussi cette pro-

priété, en créant une cellule d'accrochage qu'on renvoie en réser-

ve, avec en nom de liste l'adresse de la première cellule de la

liste descriptive.ai

ID

II existe donc de nombreuses fonctions permettant de ren-

voyer des cellules à la réserve, évitant ainsi son épuisement, qui

serait détecté lors d'un appel de cellule et signalé par un message.

Ceci est une des supériorités de SLIP sur beaucoup d'autres langages

qui nécessitent un ramassage volontaire des cellules inutiles, recher-

chant toutes les cellules non utilisées à ce moment. Cette opération

est en général suivie d'un tassement des cellules utilisées en tête

de réserve. Ces opérations coûteuses en temps machine nécessitent

une interruption gênante du processus en cours. De plus SLIP est

un des rares langages permettant de renvoyer un corps de liste entier

en réserve en une seule opération. Par ailleurs, il est possible

d'utiliser au maximum les dimensions de la machine en utilisant

un programme particulier de création de la réserve qui lie toutes

les mémoires disponibles après chargement, que nous étudierons dans

un prochain chapitre.

Page 25: SLIP: Langage de listes symétrique Applications

- 38 -

1-2-6 - Le mécanisBta du suiveur

Le suiveur/, ainsi que nous l'avons vu, permet de descendre

et de reiBonter dans une structure donnée, de rechercher dans l'une

quelconque des branches une certaine donnée, de s'arrêter dans une

structure connue à une place bien déterminée.... Il est créé par

une fonction LCETCH qui en fait un doublet chercheur vide positionné

en tête de liste. LCH » LCRTCH (L)

On peut le faire avancer de différentes manières, à droite

ou à gauche, chaque fonction ayant l'une ou l'autre option, linéai-

rement ou structurelleraent, pas à pas, niveau par niveau.

L'avance structurelle permet de se rendre compte de la forme

du graphe représentant la structure. En effet, un arrêt à chaque

embranchement permet de connaître les résultats de l'exploration :

La valeur de la fonction est le contenu de la cellule explorée

(adresse de la sous-liste suivante). Le contenu du compteur de

niveau du suiveur penset de connaître le niveau exploré. La valeur

d'un des deux paramètre de la fonction, A, permet de savoir si la

structure est terminés. Grâce à une boucle et à quelques impressions

intermédiaires, on peut donc décrire la structure que l'on aura par-

courue de la façon suivante : EMB - AVSND (LCH,A)

L DEBUT

LA

1) LCH pointé sur L niveau 0 A « 0 3oùn-llst« néant

2) "

3) "

4) "

5) "6) n

7) "8) n

n

n

tt

n

n

n

n

n 2

« 5« 4H 5n 6» F

n

n

n

n

tt

n

n

0 A

1 A

2 A

1 A

0 A

1 A

0 A

0

0

0

0

0

0

n

n

n

n

n

n

- 39 -

L'avance structurelle pas à pas (en sautant les cellules d'embranche-

ment, AVSED, ou en ne les sautant pas, AVSMD) permet de rechercher une

donnée ou un symbole dans une structure, car la fonction prend comme

valeur la donnée de la cellule où elle s'arrête.

Au cours de l'avance linéaire, un mécanisme exactement analo-

gue est mis en jeu, à la différence près que l'on reste dans une liste

donnée sans descendre dans ses sous-listes, ce qui ne justifie pas

l'existence d'un suiveur*

Les critères d'arrêt du suiveur sont fournis dans les deux

cas par des paramètres que l'on donne à la fonction : AVS (LCH, PI, P2)

1-1 : pour arrêt sur les embranchements

0-0 : pour arrêt sur toutes les cellules sauf embranchements

1-0 : pour arrêt sur toutes les cellules

Le suiveur peut être remis à l'état initial par la fonction

INITCH qui le renvoie en tête de la liste courante dans laquelle

il est arrêté. Le suiveur augmente d'une cellule à chaque fois qu'il

descend d'un niveau dans la structure. On lui rajoute une cellule

en tête, toutes les autres descendant d'un cran : il est analogue

à une pile car on ne connaît que l'adresse de la dernière cellule

appelée.

Etat A *

niveau

LP : L

2

3 UB

LB

« —

2

3 NA

LA•

1

é-i

L SL1: LASL2 :

T LA SL3 :i . , ,

LBLC

3 NL 0

^

I I »

Cellule S2

' Cellule S3

I

Etat B

HA LB

MB

(A)NC

(B)

LC

5 NCLC

*•—

3

k KBLB

» .-.. '

2

5 HALA

« —

1

5 NL 0

JsC€

^

nivelleîllule

Page 26: SLIP: Langage de listes symétrique Applications

17SD (LCH,JtK)

Entré»

£ = contenu du cuiveurLCT = adressa couranteCAHD m contenu cellule courante

ID (CARD) i 1

LCP » adresse cellule suivanteCAKD = contenu cellule LCPMettre LCP en déc. de D

ID (CAM)

ID (CAHD; : » j

ID (CAND) t K

ID (CAMD) :

Appel Nuoell > MMettre le contenu de D en MContenu de LCH-1 en K-1En LCH-1 nettre l'adresse do latête de la sous liste etaugmenter le niveau de 1En D mettre l'adresse de lanouvelle cellule en partie add.CAND = contenu de la tête de SL

1LK = adresse de la cellulesuivante du auiveurD = son contenuMettre le contenu de LK-1dans LCH-1CAND » contimu de l'eabran-cheœnt précédentrenvoyer LK

Compteur niveaudu suiveur : 0

AVSD * -1.

AVSD

LCH = contenu de D

PUT . I 2

Page 27: SLIP: Langage de listes symétrique Applications

PRESENTATION DES FONCTIONS D8 AVANCE ET BU MECANISE DU SUIVEUR

PROGRAMME PRINCIPALPONCTION AVLD (LCH,JfK) AVANCE LINEAIRE DROITE

CREATION DU SUIVEUR LCH

Entrée

CLCH = Contenu du suiveur

LK *= adresse de la cellulesuivant la cellule courante

CAND = son contenu

CLCH pointe vers cette celluleLK en LS6 de CLCH

ID (cette cellule) : 2

v /ID (cette cellule) : J

II) (cette cellule) : K

\ /

AVLD = 0. AVLD s -1.

Suiveur = CLCH

ÎTN

KLg. I 2 3 2

PRESENTATION DES FONCTIONS D'AVANCE

DIMENSION X(100 ) ,LAVS(2 ) ,LETTRE(36 ) ,MOTC216)COMMUN C R E F , X , L A V SAPPEL INITEDLIRE 122tBLLIRE 1,LETTREIMPRIMER 2tLETTREAPPEL SFPARE(LETTRE,MnT)APPEL FLSTP(MCT,LA)APPEL IMPLST(LA»AtAtA,A)LCH=LCRTCH(LA>IMPRIMER 14

8 SYMB=AVSEO(LCH,A)IMPRIMER 11,SYMBSï«A)7,8,7

7 LCH=LCRTCH(LA)IMPRIMER 15

10 EMB=AVSND(LCHtA)IMPRIMER 13,EMBSI(A)3,10t3

C RENVOIE LE SUIVEUR EN TETE DE LISTE3 LCH=LCRTCH(LA)

IMPRIMER 126 EMB=AVLND(LCH,A)

IMPRIMER 13tEMBSI(A)5,6,5

5 APPEL INITCH(LCH)IMPRIMER 100

4 SYMB=AVLED(LCH,A)IMPRIMER lltSYMBSICA)9,4f9

9 APPEL EXIT1 MODELEU2A6)2 MODELE(lHl,5Xf21HSTRUCTURE DE LA LISTE,///»4(5X,1lA6t//))100 MODELE(lHl,5X,5HAVLÊDf11 MODELE(5X,9HSYMBGLE= ,12 MODELE(1H1,5X,5HAVLND)13 MOOELEUHOt 5X,25HN(1M DE LA LISTE SUI VANTE=,012)14 MODELEClHl ,5X f5HAVSED,/ / )15 MODELE(!Hl,5X,5HAVSNDt//)122 MODELECQ12)

v l t O , C,0,0,1,0,0,1.07Ct0,0,0)

Pig I 2.3.3

Page 28: SLIP: Langage de listes symétrique Applications

STRUCTURE DE LA LISTE

IMPRESSION DE LA STRUCTURE SOUS LA FORME EN ARBRE

(A l ,B l ,CHA2,B2(AMI ,MOT(ANTOINfE»NUU02)El<NOELtFIN))

LA=077315077315 LB=000000000000 LC=000000000000 LD=000000000000 L£=000000000000

2772*5077313

077315077311

077313077307

077311077303

177307077251

000000000000

210160606060

220160606060

230160606060

077305077305

AI

B1

CI

277253077301

077305077277

077301077273

177277077253

000000000001

210260606060 A2

220260606060 B2

077275077275

277255077271

077275077267

077271077263

177267077255

077273077305

077303077245

177251077315

250160606060 El

C77247077247

277241077243

077247077241

077243077247

077263077275

240260606060 D2

000000000001

454625436060 HOEL

263145606060 FBI

000000000001

214431606060 iKL

444663606060 MOT

077265077265

277257077261

077265077257

077261077265

456443606060 HDL

000000000001

214563463145 AHTOIH

256060606060E

Fig I 2.3.4

RESULTATS DU TRAITEMENT

FONCTION AVSED (LCK,A) FONCTION AVSND (LCH.A)

SYMBOLE*

SYMBOLE- Bl

SYMBOLE* Cl

SYMBOLE* A2

SYMBOLE* B2

SYMBOLE* AMI NOM DE LA LISTE SUIVANTE=077305077305

SYMBOLE* MOT NOM DE LA LISTE SUIVANTE=077275077275

SYMBOLE* ANTOIN NOM DE LA LISTE SUIVANTE=077265077265

SYMBOLE* Ë NOM DE LA LISTE SUIVANTE=077247077247

SYMBOLE* NUL NOM DE LA LISTE SUIVÂNTE=601400000000

SYMBOLE* 02

SYMBOLE* El

SYMBOLE* NOËL

SYMBOLE* FIN

SYMBOLE* 0000

FONCTION AVLED (LCH,A) FONCTION AVLND(LCH,A)

SYMBOLE* Al

SYMBOLE* Bl NOM DE LA LISTE SUIVANTE*077305077305

SYMBOLE* Cl NOM DE LA LISTE SUIVÂNTE=077?.470772A7

SYMBOLE* El NOM DE LA LISTE SUIVANTE=601400000000

SYMBOLE* "0000

Fig I 2.3.5

Page 29: SLIP: Langage de listes symétrique Applications

jjjLiu".i ^

- 40 -

La rencontre d'une fin de liste (ID de la cellule suivante = 2)

est un critère d'arrêt si le compteur est à zéro. Sinon, le sommet

de la pile est renvoyé en réserve et l'on remonte d'un niveau dans la

structure.

Exemple de fonctionnement : fig. 1.2.33 - 1.2.34 - 1.2.35 -

Organigrammes, listings fig. 1.2.31 - 1.2.3.2

1-2-7 - La récursivité en SLIP

SLIP FORTRAN possède une faiblesse en rapport avec sa plus

grande généralité : la difficulté de traitement de fonctions ou de

sous-programmes récursifs. En effet FORTRAN, de par ses règles

propres ne permet pas qu'un sous-programme s'appelle lui-même.

Le programme doit donc tourner cette difficulté en utilisant un sous-

programme intermédiaire qui est une pseudo-opérâtion, seulement des-

tinée k appeler le sous-programme de base. Un exemple nous facilitera

la compréhension du problème. Soit à calculer : N !

Comme N ! = N.(N-l)! avec 1 ! = 1. c'est un exemple typique de trai-

tement récursif bien que c'en soit seulement un exemple restreint,

l'appel récursif se faisant seulement au premier degré. Le sous-

programme de calcul de factorielle N calculera donc factorielle (N-l)

et la multipliera par N, ceci Jusqu'à ce que N-l = 1, dont la facto-

rielle est 1. Le schéma du traitement sera donc le suivant pour

N =:4

Programme principal i > Fonction FACT(N),

ïZ = FACT(4)—

FIN

APPEL FACT(N-l)

FACT = NxAUX

AUXJ

avec un intermédiaire dans la boucle supérieure : la pseudo-fonction

FAC(N). L'appel du sous-programme se fait par l'instruction FAP

TSX $FAC,4 qui transfère le contrôle à FAC et met en réserve en RX4

le contenu du compteur ordinal, c'est-à-dire la position de mémoire

que l'on quitte. Dans les boucles, ces opérations étant faites plu-

sieurs fois, il faut garder en mémoire dans une structure spéciale,

toutes ces adresses de retour. La première boucle se fait par un

- 4l -

appel indirect du sous-programme FACT et ceci Jusqu'à ce que le

test sur N fonctionne.

PP

TSX $FACT,4

TSX N

SOR Z

rFACT SXA m, 4 «f

Appel PARMT3 rt FAC SXA MGA,4

Si N> 1 TSX $FACT,4

TSX $FAC,4 Ezz-* TSX N-l

TSX N-l SOR 1BX _<_ TRA 2,4 =

SOR AUX fE -

Appel RESTR3

Sinon FACT(N) = N x FACT(N-l)

TRA 2,4 transfert en (gg) + 2

Transfert en (HGA) + 2

La seconde boucle est plus compliquée à réaliser. Si l'on ne met

pas (RX4) en réserve, elle se fera indéfiniment car la dernière valeur

de RX4 dans FACT est l'adresse de FAO, et celle de RX4 dans FAC est

l'adresse d'appel de FAC par FACT. Il faut donc, dans FACE mettre

les différentes valeurs de RX4 en réserve et les récupérer ensuite,

de façon à trouver au bon moment l'adresse de l'appel par le programme

principal, ce qui permet de suivre les flèches dans le bon ordre.

Il faut de plus mettre en réserve les valeurs de N et de N-l

de façon à pouvoir appeler FACT (N-l) et faire 1*opération

FACT(N) = N x FACT(N-l)

Cette mise en réserve se fait dans des listes spéciales,

ineffaçables que l'on peut appeler en tout point, car leur adresse

est mise dans le "COMMUN". Ces mises en réserve se font par les

sous-prograssnes PARMTn (A,B N) qui ajoutent en tête des listes

W(l), W(2) W(N) les paramètres à conserver (ces listes sont en

quelque sorte des piles). La récupération des paramètres se fait de

la même façon, en renvoyant en réserve les têtes de liste, après avoir

récupéré les données de ces têtes de liste, par le sous-programme

KESTRn (A, B N). L'exemple traité permettra de suivre aisé-

ment cette opération. Fig. 1.5.1 - 1.5.2 - 1.5.3 - 1.5.4

Page 30: SLIP: Langage de listes symétrique Applications

£^

CALCUL DE PACTOKIELLBS

PROGRAMME PRINCIPAL

C A L F A C CALCUL DE FACTORIELLE N

DIMENSION XdOOl ,LAVS(2ICOMMUN C R E F , X , L A V S FACAPPEL INITED

3 LIRE ItNIMPRIMER 10, NZ = F A C « N )IMPRIMER 2,N,ZALLER A 3

1 MDDELEU3)2 MODELE < 1HO, 10X, 1 2HFAC TORI ELLE (,I 2, 2H1-.1 4, / / /)10 MODELE(1H1,23H CALCUL DE FACTORI ELLE< ,12 ,1H1 ,/f /l

F IN(1, 1,0,0,0,0, 1,0,0,1,0,0,0,0,0)

AA

Fig. I. 5. 1

AE

SOUS PROGRAMME FACT

SQL'S PROGRAMMÉ F A C T ( N ) MG

SOUS PROGRAMME F A C T ( N ) UNAPPEL F/VC(N) AUX

IMPRIMER. 1 AUXN1 MODELE (1 OH INTERLUDE? .^VMI

RETOUK AUXM1

f ïN ( l , l tO tO»0 ,0 , l , n ,0 , l , 0 ,0 ,O tOtO)

Fig. I.5.2

?

SOUS PROGRAMME PAC ;

COMPTENTREESXARADcnRO w 1 \

RADSRARADSORRADSORSSTSORTEDTSXTSXTSXTSXRADTZETSXTSXTSXTSXT S XTSXEMQMONDAGSORTEDRADEEX•** r~\ ATRAOCTBCSBCSU \v \i*r

BCSFIN

Fig.

40FAC

5( IMP) ;7 lc.

1 » A

AA !

UN :

AUX##AUXNUNAUXMl=HAUXM1$ P A R M T 3 » 4MGAUXNAUXMlAUXMlAE$ F A C T » 4AUXMl$RESTR3»4MGAUXNAUXMlAUXNf \ V^ f\ ' '

AUX17AUX= HAUXAUX

>400000100000011JL1

1.5.3

CALCUL DE FACTORIELLES

AUXMl ( 01*000004000000* 0.00229588E-38077400465264 000005000000 000004000000 AUXMl (077400473512 000004000000 000003000000

AUXMl ( 01*000002000000* 0.001 14794E-38077400473512 000003000000 000002000000 AUXMl 107740047351? 000002000000 000001000000

AUXMl ( 01=000000000000= 0.077400473512 000001000000 000000000000077400473512 000001000000 000000000000 AUX f

INTERLUDE07740047351? 000002000000 000001000000

AUX ( 01-000002000000* 0.001 14794E-38INTERLUDE

077400473512 000003000000 000002000000 AUX CINTERLUDE

077400473512 000004000000 000003000000

AUX ( 01*000030000000= 0.01377532E-38INTERLUDE

077400465264 000005000000 000004000000 AUX (

FACTORIELLFf 51* 120

A'IXMl ( 01=000005000000= 0.00286985E-38077400465264 000006000000 000005000000 AUXMl <077400473512 000005000000 000004000000

AUXMl ( 01*000003000000* O.C/01T2191E-38077400473512 000004000000 000003000000 AUXMl (077400473512 000003000000 000002000000

AUXMl ( 01*000001000000* 0.00057397Î--38077400473512 000002000000 00000 > 000000 AUXMl 1077400473512 000001000000 000000000000077400473512 000001000000 000000000000

AUX ( 01*000001000000* 0.00057397E-38INTERLUDE

077400473512 000002000000 000001000000 AUX 1INTERLUDE

077400473512 000003000000 000002000000

AUX ( 01-000006000000* 0. 003443 83F-38INTERLUDE

077400473512 000004000000 000003000000 AUX (INTERLUDE

077400473512 000005000000 000004000000

AUX 1 01*000170000000» 0.06887662E-38INTERLUDE

077400465P64 000006000000 000005000000 AUX (

FACTORIELLE( 6l" 720

01*000003000000*

01*000001000000*

01-000001000000*

01*000006000000*

01*000170000000-

01-000004000000=

01-000002000000*

01*000000000000»

01-000002000000-

01-000030000000*

01-001320000000*

0.00172191E-38

0.00057397E-38

0.00057397E-38

0. 003443 83E-38

0.06887662E-38

0.00229588E-38

0.00114794E-38

0.

0.00114794E-38

0.01377532E-38

0.23877229E-38

Fig I 5.4

Page 31: SLIP: Langage de listes symétrique Applications

- 42 -

Cependant il faut remarquer que cet exemple est le plus

simple de ceux que l'on peut rencontrer : en effet, l'appel récur-

,-;if ne l'est qu'au premier niveau, le sous-programme s'appelant lui-

*••**.(&.* par un seul intermédiaire alors qu'il est possible que ce ne

; OH. qu'après deux eu trois appels de sous-programmes que le sous-

p.x ranBae origine soit appelé. De plus, dans le cours du sous-

pv-ngramme on ne rencontre qu'une fois la séquence d'appel récursif,

alors qu'on le verra dans le calcul de la VALEUR ou de la DERIVEE

d'une fonction, il est très possible de la rencontrer de 2 à 14 fois.

Dans ce cas, le sous-programme intermédiaire (FACT) doit aussi être

équipé pour traitement récursif.

1-2-8 - Les données en SLIP

Comme nous l'avons vu, les données se logent dans la seconde

cellule des doublets des cellules qui ne sont ni des cellules de tête

ni des embranchements. La première réflexion que nous inspire ceci

est que la place est peu importante. En effet, un mot machine est

court pour loger des données. Pour pallier ceci on peut utiliser

deux stratagèmes i loger non une donnée numérique, mais un syrobole

alphanumérique, ou loger l'adresse d'un tableau de nombres ou d'un

autre groupe de données.

Adresse d'un tableau de nombres

Pour reconnaître la structure de la donnée, on peut utiliser la

zone index de la première cellule (l ou 2) ou la zone préfixe de

l'une des cellules, en y mettant 4, 5 ou 6. Les fonctions WAGON

et TAB pointant sur un tableau de N isémoires, ou sur une suite de

données utilisent la zone index. Pour le tableau (zone index * 2),

la donnée contient le nombre de cellules et l'adresse de la tête

de tableau

NA B LSGH

2 LSD ]Add «j

1 .

TAB(N)

» TAB(l) 1

Appel Î.HSIN2 (G, LSG, 2f LSD, NA)

- 43 -

Pour la suite de cellules, la donnée contient l'adresse

d'un autre doublet, et ainsi de suite, ce qui constitue une liste

non symétrique.

Elle peut contenir

des symboles SI SN

et une donnée.

I1

0 *LSG i LSD .ADD1, tu

1

*

mO S1 i 32

S3 ADD2*

c.1 fH 1j Don

> £5iSe

Addl "Donnée 1Donnée 2

Symboles

II est possible aussi de constituer des listes de symboles au lieu

de constituer des listes de nombres. Cette technique est utilisée

par les interpréteurs LISP ou IPL V, chaque symbole pouvant, après

traitement prendre une ou plusieurs valeurs. Par exemple chaque

symbole est un tableau de trois SYMB1 Addl T* Cellule

cellules dont les deux dernières

contiennent une donnée.

Ce traitement de liste de symboles permet de traiter une

liste facilement écrite, grâce à des parenthèses de séparation de

niveau (sous-programme PLSTP). La ligne ' I Tête

(SI, S2 (331, 332 (3331, S??2)S34)S4)

correspond à la structure suivante,

chaque niveau étant déterminé par

compte de parenthèses.

S2m332

S34

Tête

—tfôte

Une autre méthode d'utilisation des symboles est celle des

listes descriptives, l'enchaînement des cellules ne servant qu'à

bâtir la structure, les symboles étant contenus dans les listes

descriptives qui contiennent et les symboles, et leur valeur.

La structure suivante (fig. 1.2.6} correspond à la liste

(SYMBQL1(SYMBOL3(SÏM30IA) ) (SYMBOLS) )

Une fois la liste traitée, on dispose des valeurs des diffé-

rents symboles. Le passage de l'une de ces formes d*expression de

listes à l'autre, permet le traitement des symboles par la structure

de la liste, telle la dérivation formelle.

Page 32: SLIP: Langage de listes symétrique Applications

- 44 -

Fig. 1.2.6

DL1

DL1

0SYKJOL 1=fi

DL2

DL2

ol} VALÏ

DL5

DI4

0SÏKBI

aYAI 3

DL4

Cela peut être très utile que de passer de la notation

(X 4- (B x Y) + (SIN(C x Z))) à la liste

}"— - ' • » - - » I

4.

' i — -^Lv -4— *f° F Hfr- — TT^^^TB

•!•* ,.. II. ,• ir

(ÏT Tl 1 gf«n i L

*4-

C

-4(SI

f1-»

ÏÏ— A

1 \I

oj1T

«B

"1!*

II-m

-*

•i*•r

n., ., j2

•m

- 45 -

1-2-9 - Ecriture du langage

II existe plusieurs moyens de créer un langage de listes, ainsi

que nous l'avons vu dans les premiers paragraphes. Pour SLIP, cela

pouvait être un langage spécial, reprenant par exemple les fonctions

existantes, et passant directement aux opérations machine, par l'inter-

médiaire d'un interpréteur SLIP, câblé ou non , mais n'utilisant pas

les compilateurs classiques des machines (FORTRAN ou autres). Cela

pouvait aussi être l'écriture en FORTRAN, telle celle qui a servi à

la présentation du système. Mais dans cet ordre d'idées, la présen-

tation la plus économique, la plus rigoureuse, est évidemment l'écriture

en langage machine FAP, MAP.... L'écriture en FAP est facile, car

elle s'inspire très directement des sous-programmes FORTRAN, compilés.

L'écriture en MAP s'avère plus difficile à optimiser du fait de l'exis-

tence de macro-opérâtions, de parties communes à certaines fonctions,

ce qui fait d'ailleurs la supériorité de MAP sur FAP.

Nous avons écrit la très grande majorité des fonctions en FAP,

ce qui avait été aussi la solution adoptée par l'équipe qui au MIT

avait mis au point SLIP. Cette présentation permet, au traitement,

un gain de temps appréciable, car FORTRAN, comme tout langage général,

prend un grand nombre de précautions, avant d'écrire le corps du sous-

programme, précautions en général superflues, car il n'est pas adapté

aux opérations qu'il a, ici, à effectuer. D'autre part, la définition

des types de variables est un obstacle qui n'existe pas en FAP. Ainsi

un sous-programme écrit en FAP, occupe environ 30 % de mémoires de

moins que le même sous-programme écrit en FORTRAN. Comme, au char-

gement, les sous-programmes et fonctions, occupent environ 10 000

mémoires et que le reste est consacré à la réserve, 50 % de place en

plus , fait 3 000 positions de mémoire de plus pour la réserve, ce

qui n'est pas négligeable.

Il est évident que la réalisation d'un compilateur, d'un

interpréteur, en SLIP sans le fardeau de FORTRAN est la meilleure

solution et cela sans aucun doute, du point de vue du temps machine,*

puisque ceci a été réalisé en LISP et en IPL, et est en cours de

réalisation pour SLIP au MIT, mais on peut se demander si cela est

la voie de l'avenir, car il existe maintenant aussi une version de

Page 33: SLIP: Langage de listes symétrique Applications

LISP en ALGOL, et que le nouveau langage d'IBM, le PL 1, en cours de

réalisation, langage qui utilise les listes, est écrit en un langage

universel.

CONCLUSION - Le langage SLIP

3LIP est donc un langage complet, et par bien des cotés supérieur à

bien d'autres langages, par sa symétrie essentiellement, par sa réserve

toujours de capacité maximale et son auto-gestion, par sa facilité à trai-

ter des problèmes numériques, par l'accès aux dispositifs d'entrée - sor-

tie de FORTRAN, par ses facilités d'utilisation sur de nombreuses machines

à compilateur du type FORTRAN grâce à ses fonctions bien distinctes. On

peut même grâce à lui réaliser les procédures de LISP et IPL : CAR, CDR,

CONS par exemple.

Cependant, il n'est pas toujours utile d'utiliser un langage aussi

élaboré. Si un traitement peut se faire par les piles, point n'est besoin

de charger un dispositif complet de traitement de listes. Lorsque l'on a

un certain nombre de données à relier qui arrivent chacune à son tour, la

façon la plus logique de les emmagasiner est le tableau de nombres à condi-

tion de connaître l'adresse du premier mot disponible. Ceci a été le point

de départ de l'utilisation des "piles" qui ne sont rien d'autre qu'un ta-

bleau dont l'adresse de la tête varie, ce qui est analogue à un décalage

global vers le bas où toutes les données changeraient de mémoire pour aller

dans la mémoire suivante du tableau, la tête restant fixée

L'utilisation des piles est plus courante que celle des listes, mais

ces deux entités, lites et piles, ont un point commun : les différentes

données sont reliées entre elles par des liens qui bien que de types diffé-

rents - l'un par mémoires consécutives, l'autre par l'adresse absolue de la

cellule - n'en expriment pas moins une idée de suite.

Les listes communes que nous avons étudiées dans le traitement récur-

sif n'ont qu'une utilité de piles. Il ne serait pas nécessaire d'utiliser

un support aussi complexe que SLIP pour cette opération, mais cela procède

d'une rationalisation des traitements.

On peut donc dans certaines circonstances ne charger en machine que

les fonctions qui seront réellement utilisées (ce qui est utile sur les

petites machines) et éviter de se servir du suiveur lorsque ce n'est pas

strictement nécessaire, car les fonctions AVS... AVL... sont nombreuses

et relativement compliquées, ce qui occupe de nombreuses positions de

mémoire.

SLIP a aussi de nombreux inconvénients, telle la difficulté de passer

du traitement des symboles aux opérations algébriques, difficulté due à

l'inexistence d'un interpréteur complet, l'impossibilité ou la difficulté

d'écrire des programmes autoraodifiables, car ils ne sont pas écrits en

liste. Mais il ne faut pas demander de performances au-dessus de ses pos-

sibilités à un quelconque langage, et ses performances au point de vue

rapidité sont à SLIP un atout majeur. A chaque type de travail correspond

un langage adapté, et mieux vaut connaître plusieurs langages plutôt que

d'en vouloir un universel. Nous allons voir que SLIP permet des réalisa-

tions intéressantes.

Page 34: SLIP: Langage de listes symétrique Applications

- 48 -

II - REALISATIONS

II-l - OPTIMISATION DE LA TAILLE DE LA RESERVE

Une faiblesse de plusieurs langages de listes résulte du fait

que la réserve est créée en dimension par le programmeur, qui ne con-

naît pas les dimensions de l'espace qui restera disponible après char-

gement du programme et des sous-programmes. Cet écueil est aisément

levable en IPL où l1interpréteur est un interpréteur IPL comprenant

le chargeur. Mais en SLIP, ceci n'est pas possible, car les dimen-

sions de l'espace disponible ne sont connues qu'une fois la compila-

tion et le chargement terminés et qu'à ce moment, le compilateur

FORTRAN ne donne pas accès aux mémoires libres. Il a donc été néces-

saire de tourner ces règles et de mesurer l'espace disponible au

cours du traitement. Ceci a été résolu grâce à la connaissance des

règles du chargeur, qui permettent d'avoir accès au nom du sous-

programme de moniteur chargé en queue de table. Grâce à cette adresse

on peut connaître celle de la première mémoire libre. L'autre écueil

est qu'en FORTRAN sur IBM 7094 des mémoires COMMUN sont chargées en

queue et en remontant, ce qui fait que la première mémoire de la réserve

doit être la dernière du commun. On doit

donc dimensionner à un nombre quelconque

la variable représentant la liste d'espace

disponible, et mettre cette variable à la

On

MoniteurPPSPMoniteurEspace libre

j COKMJN suite des autres dans le commun.

fera donc une liste d'espace disponible commençant à cette mémoire,

et finissant à la première mémoire libre après les sous-programmes

de contrôle du moniteur. C'est ce que réalise la nouvelle version

du sous-programme INITED (INITfiS) associé à la fonction KFINAL dont

les listings et organigrammes sont ci-après. Fig. A.8

II-2 - DIFFERENTES PRESENTATIONS DES LISTES

II existe deux façons essentielles de se représenter une liste :

la première est de représenter les mémoires reliées les unes aux autres

- 49 -

et leurs contenus, comme nous l'avons fait quand nous avons étudié

le mécanisme de SLIP.1 • ~ . 1li)^ DL 0

t»^u . — 1 — , — __

—A |

r 1>0

1B

"»-J"

1 »

G Jl 1

C'est ce que visualise le sous-programme IMPLST qui imprime le contenu

des différentes mémcires des listes d'une structure (liens et symboles

ou données) jusqu'au niveau 4.

Le second moyen consiste à représenter la liste linéairement

par ses symboles en faisant abstraction des liens, qui sont implicites.

Ceci a l'avantage de ne pas être attaché à un langage de liste parti-

culier et de mettre en évidence l'essentiel, c'est-à-dire les symboles

ou les données, les signes de niveau différent étant les parenthèses

(1) (A, 3, C) (2) (A, B(C, D) E(F(G, H))I)

II est évidemment très commode de passer d'une structure à l'autre,

de mettre sous la forme de liste SLIP, exprimable sous la forme

IMPLST une liste de symboles parenthèses, et de rendre plus concise,

plus expressive, une structure SLIP. C'est ce que réalisent deux

programmes que nous analyserons : LISSYM et FLSTP.

II-2-1 - Sous-programme IMPLST

C'est un sous-programme dont un paramètre est le nom

de la tête de liste principale, qui imprime en octal (012) le

contenu de toutes les mémoires de la structure (liens et données)

suivant une forme arborescente, séparant les différents niveaux.

Il ne permet pas de représenter les structures bouclées (ce que

ne permet pas non plus la notation parenthésée). Comme il n'est

pas récursif, il n'a été conçu que pour imprimer 4 niveaux (le

maximum avec la place dont on dispose sur une feuille de pro-

grammation). Il est entièrement en octal, ce qui est utile pour

représenter les adresses machine, mais peu pratique en ce qui

concerne la manipulation de symboles. Néanmoins il donne une

image très claire de la structure.

Appel IMPLST (LIST2, C, F, G, I)

Page 35: SLIP: Langage de listes symétrique Applications

La liste (2) se représenterait :

6

0

2001

0

*6/u

01 i G

0 , cX

000000000021000022

000000000000000000

« £ t£

A000025V

;000031

200

AB

000000ï)201

Xfc.

00000000002302 A

0000010

0

E

-rt

000000

Tl000000000026

P

cr

£*I

000001000000P200

o< £CD rapr

adrefiéao

21 -p sont

A, B

r wP t G

- P H

' If ....

éeentent lesssss desires

î-<~ « i . .les syoboles

cxxxx>o000027000030

00000'D0 i

Exemple et listing fig. II.2.1 et II.2.2

II-2-2 - Passage de la. liste de symboles à la liste SLIP

C'est la réalisation la plus difficile, car on part

dfune suite de symboles qu!il faut analyser. Ceci est fait par

le compilateur ou l'interpréteur en LISP mais doit être program-

mé en SLIP. Il faut tenir compte des critères de séparation que

peuvent constituer les parenthèses gauche et droite, les virgules,

les blancs. Chaque parenthèse exprime le passage à un niveau

différent : ( —& niveau + 1 ; ) —» niveau - 1. La virgule

ou les blancs séparent deux symboles, dont la longueur ne peut

excéder 6 lettres. Cette analyse et la mise de chaque symbole

et parenthèse dans un mot est exécutée par SEPARE, fig. II.2.3,

II.2.4. La recherche du niveau par le compte de parenthèses est

effectué par CPAR (fig. II.2.6) qui compte les parenthèses d'ou-

verture et de fertoeture. C'est en effet \m problème épineux que»*•.

celui de la séparation de caractères, car il procède de la

- 51 -

reconnaissance de structures. C'est un travail analogue à

celui d'un compilateur qui est réalisé ici : reconnaître les

symboles, et suivant leur signification, faire des opérations

nécessaires. Les critères de séparation de mots sont : les

virgules, les blancs, les parenthèses. Un travail de même

nature est exécuté dans la fonction VALEUR, qui utilise d'ail-

leurs ces sous-programmes pour confectionner ses listes, mais

travail plus complet, en ce sens qu'elle exécute elle-même les

opérations arithmétiques après reconnaissance des symboles opé-

rations comme un véritable compilateur. La confection de la

liste SLIP est faite par FLSTP. Les résultats seront imprimés

suivant le modèle IMPLST. (FLSTP II.2.5 - Organigramme II.2.7 -résultats II.2.8).

II-2-3 - Passage de 1& liste SLIP à la liste de symboles avec

parenthèses

Ce travail, l'inverse du précédent, est considérablement

plus aisé à programmer, car il peut utiliser les fonctions d'ex-

ploration des structures (AVSED) pour progresser. Il doit sim-

plement tenir compte du niveau auquel il est pour intercaler entre

les symboles les parenthèses gauche ou droite, et savoir quand il

a atteint l'extrémité de la structure. La fonction LISSYM

réalisa ce travail (Listing figJI.2.9 - Organigramme fig. 11.2.10)

II-3 - LOGERENT DE DONNEES LONGUES ET DE SYMBOLES

II-3-1 - Fonction WAGONS, TABLEAU

Nous avons expliqué dans l'étude des fonctions SLIP le

mécanisme choisi pour introduire de nouvelles possibilités de

logement de données par accrochage à la suite de nouvelles

cellules de données, ou par la référence à un tableau. Nous

reproduisons ici le programme d'exploitation, les sous-

programmes LWAGON (fig. II.3.1), MITAB (fig. II.3.2), MIL (fig.

II.5.3), INSIN2 (fig. II.3.4), ROELL (fig. II.3.5). Il est à

remarquer que la fonction RCELL ici est une fonction recursive,

mais particulièrement siaple car si elle se rappelle elle-F«me,

elle ne nécessite pas un processus analogue à celui étudié pour

Page 36: SLIP: Langage de listes symétrique Applications

le calcul d'une factorieIle, ou la valeur d'une fonction.

Il faut simplement conserver l'adresse de retour au programme

principavl.

II-3-2 - Manipulation des symboles

La manipulation des symboles est aisée en SLIP, bien

que le langage soit mieux adapté au traitement numérique, mais

lorsque l'on veut associer une ou plusieurs valeurs à un

symbole, on est bien souvent conduit à des manipulations diffi-

ciles et trop spécifiques. Il existe une méthode de généraliser

cette opération ; faire la table des symboles et associer à

chaque symbole une ou plusieurs valeurs, dans un tableau. Ceci

est très possible, car au cours du traitement d'une structure

on n'introduit pas de nouveaux symboles.

Soit la structure (A(B, C(C,E) X) C(H, X))

La liste des symboles sera A B C D E X H

Si elle est logée dans un tableau:A,Valeur de A, B,Valeur de B...

on peut avoir accès aisément aux valeurs des symboles, en ayant

uniquement à reconnaître le symbole en question .

Quel que soit le traitement que l'on ait à faire subir

aux symboles (dérivation manipulation), on n'introduit aucun

symbole nouveau donc la table de symboles est invariable et on

peut encore s'en :.*v±r après ce traitement. Ceci est évidem-

ment préférable à une liste, où, en correspondance avec chaque

symbole, dans la liste elle-même, on doit avoir une liste de

propriétés, ou une cellule de données supplémentaires qui

contienne la valeur, et que l'on doit introduire au moment de

la construction de la liste elle-même et ceci dans toutes les

positions de tous les symboles. Le tableau de symboles est

obtenu par : Appel TABSYM (LA, TAB), (fig. III.5. - III.6.). Les

valeurs numériques sont chargées dans TAB (l) pour I pair, par

lecture de cartes, avec en tête celles qui seront introduites par

la fonction DERIVE (ZER, UN, UîJM).

SOUS PROGRAMME IMPLST

CIMPLSTSOUS PROGRAMME IMPLST(LA,LB9LC,LD,LE)1=0IMPRIMER 13,LA,LB,LC,LD,LEZU=CONT(LA)ZU1=CONT(LA-1)IMPRIMER 11,ZU,ZU1

4 JU=LSD(ZU)ZU=CONT(JU)ZU1=CONT(JU-1)

72

SI ( 1-80)7*3,3SI ( ID(ZU)-2)2»3,2IMPRIMER il,ZU,ZUlSI ( ID(ZU)-1 )4,5,4MA=LSD(ZU1)ZA=CONT(MA)ZA1=CONT (MA-1 )IMPRIMER 17,ZA,ZA1J = 0JA=LSD(ZA)ZA=CONT( JA)ZA1=CONT( JA-1 )

810

SI ( J-80)8,4,4SI ( ID(ZA)-2 )10,4,10IMPRIMER 17,ZA,ZA1SI ( ID(ZA)-1 )6,14,6MI=LSD(ZA1)ZI=CONT(MI )ZI1=CONT (MI-1 )IMPRIMER 62, II ,ZI1K = 0JI=LSD(ZI )20

ZI=CONT(JI)ZI1=CONT(JI-1)SI(K-80)21,6,6

21 SI(ID(ZI)-2)22,6,2222 IMPRIMER 62,ZI ,ZI1

SI ( ID(ZI)-l)20,23,2023 ALLER A 2011 MODELE(2(6X,012),//)13 MODELEt1H1,5H LA=,012,5H

1012,///)17 MODELE(36X,2(6X,012),//)62 MODELE(72X,2(6X,012),//)3 RETOUR

FIN

LB=,012,5H LC=,012$5H LD=,012»5H LE=

II 2.1

Page 37: SLIP: Langage de listes symétrique Applications

FONCTION IMPLST Exemple d1 impression de liste

(4<*f )(*,B(CO(+(*,C ,

l . / » = 0 7 7 3 1 ï ( m 3 1 5 L B = O O O O C ) O O C O O < 5 0 LC=000000000000 LE = C O C C C C C C O C O C

mM3 ooooooooonoo

0 7 7 3 1 * O T < ^ 0 7 2 0 É O i ( 6 0 f 0 6 0

1T/313017Z65 077311071311

277277077305 O O n o C O O O O D O l

077311Q773C3 54606060606p

0773C5077277 216060606060

177303077311 077301077301

1V/307077315 077267017267

277255077263

C77267077261

C77263077255

000000000001

546060606060

226060606060

177261Q77267 077257077257

277271077P75 O C O O C C . Q O O O O 1

077301077273 5 4 5 4 £ C é C É C 6 0 «-

077275077271 6 7 6 C É C É C 6 C 6 0 x

077273077301 242564676C60 DEUX

*

B

277247077253 "OCCCCCCOCCC1

077257077247 2 3 4 É É C É 0 6 C É C Coa

Î77253077257 C 7 7 2 E 1 C 7 7 2 5 1

277231077245 CC0000000001

C77251077241 206060606060

177245077231 077243077243

C77241077251 246060606060

SYMB

II 2.2

9

FONCTION SEPARE

***

LISTEIDENTIFIFAP

CATION

*SEPARE

SEPARE

AB

ADA

ADB

AA

TT

TR

AG

TON

ADC

COMPTENTREESXASXASXARADSORRADSRARADSRASRASRASRAEEXEEXRADSORRALSRLRALOEATZETRASXDTRARADADDSRDSORRALETASPI-RALRALDLOSRLTXATXITXATXIEEXEEXEEXRALSRLTXITRATXARALOEA

300SEPAREENDI.lENDI+1»2ENDI+2,4$(IMP)21,4AB2 » 4AMBABBBC0,10,2UNMNA**»!AUX1AUX1BLBLADAADBTON, 2TRNASIXTTNAAUX1MAXMU,2MU, 2AUX16AUX1*+l»2»lA A » 2 »***-H,l,lAB,1 ,350,10,20,4MUtlMOTADC»1,**ENDI*+l,l,lMOTBLANC

BC

AO

AP

AE

AL

AH

BA

AF

TZERALOEATZERALOEATZERALOEATZERALEMQDLOSRLTXARADSORTXIRALSRLTXAEEXRADSORTRARALSRLTRARALSRLTRASXDRADTZERADSSTPDXSXDEEXRALDLOADDSRLTXATXIRADSOREEXRALSRLTXASXDRADTZERAD

AGMOTVIRGAEMOTPARGAOMOTPARDAPAUX2MOT6AUX2*+l»2» 1UNPAG,2,5AUX2**»4*+l,4, 10,2ZEROPAGPOUVMOTAFPFERMOTAFAUX3-2PAGCINQAUX30,2AH, 20,2AUX26BLAUX2*+l»2» 1AL,2»**ZEROP0 ,2AUX2**,4AG,4,1AUX3,2PTVCINQ

AV

AR

AM

TVBB

ENDI

PAUX3UNMNABLBLCINQAUX1ZEROMAX

MUMOTBLANCUNVIRGPOUVPFERPARGPARDAUX2SIXBL

SSTPDXSXDEEXRALDLOADDSRLTXATXIRADSOREEXRALSRLTXARALSRLTXAEEXEEXEEXRADSORTRABCSBCSOCTBCSOCTOCTBCSOCTOCTBCSBCSBCSOCTOCTOCTOCTOCTOCTOCTBCSOCTOCTFIN

AUX30,2AR,20,2AUX26BLAUX2

AV,2,**ZEROP0,2AUX2**,4

MOT**,4AG,^,!**,!**,2**,4ZERO'P3,41140000100000016060606060600000050000001000000000000770000000000216116000000000000000010000007300000000007460606060603460606060607400000000003400000000001000006000000000000000060

Fig II 2.3

Page 38: SLIP: Langage de listes symétrique Applications

PODCTIOI

(RX2) signifiecontenu d» RX2

dTON signifieparti* dioHnrnt de TOH

/ JOUI t BLHL

2 di«it» AUX1Décaler ai. 6 à gauche(EX2) + 1 __>.RX2

(RX4) + 1 —> RX4AUX2 —> H - RX4

(RX2) + 1 —». RX2SRL AIK2ADD BLDLO 6

EX1 i dTON~"N>5 - AUX3 —^ dAH

(nxi ) + 1 —> rai

S MOT l PARG

5-K33 —É-4AR

(AUX2) —>.K - (RX4)(RX4) + 1 _».HX4

a(EI2) + t _*-EC2

JQX2 —(Œ4) +'1 —».EI4HOT —*.H -(RX4)KZ4 + 1 —»RX4

SOUS PROGRAMME FLSTP (MOT.LA)

SOUS PROGRAMME F.LSTP ( TSYMB ,LPARAM )DIMENSION TSYMB(l)»NPILE(40)LC = 0J = l1 = 1

30 TRAV=TSYMB(J)P=lINDIC=ICPAR(TRAV,P)SI ( INDIC-1)4,3,4

4 P = 0INDIC=ICPAR(TRAV,P)SI( INDIC-1)2,1,2

1 LA=LISTE(9)SI(LC)10,11,12

10 IMPRIMER 100ALLER A 25

11 LPARAM=LAALLER A 13

12 I = L CLK = NPILE( I )APPEL N V Q U ( L A , L K )

13 LC=LC+1I = L CN P I L E ( I ) = L A

ALLER A 202 I=LC

L T = N P I L E ( I )

APPEL NVQU(TRAV,LT)ALLER A 18

3 LC=LC-1SI (LC)10,25,20

20 J=J+1ALLER A 30

18 SI(J-60)20,19,1919 IMPRIMER 10125 RETOUR100 MODELE(1H1»24H ERREUR SUR PARENTHESES )101 MODELE(1H1»26H ERREUR LIGNE TROP LONGUE )

FIN

FONCTION CPAR

Fig II 2.5

*CPAR

ICPAR

P

AB

AC

AFSOR

ZEROAUXUNCPFERCPOUV

COMPTENTREESXARADSRARAD -SRARADTZERALSRLTRARALSRLRALOEATZERADTRARADEEXTRAOCTBCSOCTOCTOCTFIN

25ICPAR.SOR, 41,4AC2,4P##ABCPFERAUXACCPOUVAUX##AUXAFZEROSORUN**»43,40000000000001000001000000346060606060746060606060

Fig II 2.6

Page 39: SLIP: Langage de listes symétrique Applications

ÏLSTP

PONCTION FLSTP Exemple de réalisation

Ent

•LC

Loc'buroTHAV - TS1HB (j)

Reoonter1 niveau F

oui 1

TSAV t

LC : eospteur de niveau

: cellule logeant le aynbolo lu

J > EBQY (TRAY,ajouter unscontenant 1

SHREUR< OU1Ç L1«ne w

FIS

•<f

LAÎT" Creation de> oillulo tôte de listo u

HAY

u.ï c^ C<^ T^ t n X?^ yia ^—5— NIVEAUmin^ \ l 1 '^ «AViwvu

,_ 1 (LA) .PARA50011 , , 1 — ~-ZI »LCLK » NPILE (l)BVQY (LA,LK)Accrochags as LÀ a laxiate oouyantc ii

LF

|ttc) + i _*.» | *ÏÏS±-

1 1| (LC) -_*ï

> r

| (LA) __*KPILE (i) ]

>l

STRUCTURE OE LA LISTE

IAI,81,C11A2,B21ANI,MOTIANT01N,E)NUL)D2)EI (NOËL,F IN))

LA=077315077315 LB=000000000000 LC=000000000000 LD=OOOOOOOÛOOOO LE=000000000000

2772*5077313

077315077311

077313077307

077311077303

177307077251

000000000000

210160606060

220160606060

230160606060

077305077305

0773030772*5 250160606060

177251077315 0772*70772*7

277253077301

077305077277

077301077273

177277077253

000000000001

210260606060

220260606060

077275077275

077273077305 2*0260606060

2772*10772*3

0772*70772*1

0772*3077247

OOOO00000001

*5*625*36060

2631*5606060

277255077271

077275077267

077271077263

177267077255

OOOQ00000001

21*431606060

4*4663606060

077265077265

277257077261

077265077257

077261077265

000000000001

21*563*631*5

256060606060

077263077275 4564*3606060

:. H a 7

Fig. II. 2 .8

Page 40: SLIP: Langage de listes symétrique Applications

CC

23

C8610

30

2620

21

25

14

SOUS PROGRAMME LISSYM (LAfSYKB)

LISTE DE SYMBOLESLOGE LA LISTE DES SYMBOLES

SOUS PROGRAMME LISSYM(LA,SYMB)CREATION DE LA LISTE DES SYMBOLES UTILISES SOUS FORME PARENTHESEEDIMENSION SYMB(ioO),LlEN(20)»N(20)LA EST LA LISTE DONT ON CREE LASYMB EST LE BLOC DANS LEQUEL ONPARD=3H)PARG=3H(LCH=LCRTCH(LA)APREM=AVSED(LCH,A)NIV=LCNVCH(LCH)S I ( N I V ) 1 , 1 » 2F A I R E 3 1 = 1 , N I VS Y M B ( I ) = P A R GJ = N I V + 1SYMB(J)=APREMJ=J+1ALLER A 4SYMB=PARGSYMB(2)=APREM

DON=AVSEDUCH,A)S I ( A ) 9 , 8 , 9TEST DE CHANGEMENT DE NIVEAUSKNIV-LCNVCH(LCH) )5 ,6»7SI ( I N D ) 2 1 , 1 Ù , 2 1LÏNK=LSG(CONT(LCH-1))SI ( L I N K - L I E N U ) ) 30,21,30FAIRE 26 I=2 ,NÏVOSKLINK-LIEN(I) )26,2l,26CONTINUERS Y M B ( J ) = P A R DJ=J+1SYMB(J )=PARG

SYMB(J)=DONIND=0

LIEN(1)=LSG(CONT(LCH-1) )N(1)=LSD(CONT(LCH-1) )FAIRE 25 1=2, NIVK-l-lLIEN(I)=LSG<CONT<N(M)-1))N( I)=LSD(CONT(N(M)) )NIVO=NIVALLER A 4SYMB( J)=PARD

NIV=NIV-1ALLER A 8SYMB(J)=PARGIND=1J=J+1NIV=NIV+1ALLER A 8FAIRE 14 1=1, NIV

SYMB( J)sPARDJ=J+1RETOURFIN

2.9

essFONCTION LISSÏM

LCH = Suiveur

APREM = AVSEDNIV B niveau 1er symb

<i

TJTV » n/

SÏMB (J) = PARGautant de fois que NIV 0

J = NIV + 1SÏMB (J) = APREM

J = J + 1

LIENCD. »

SÏMB f 1 ) a PARCSÏMB (2) = APREM

J =3

DON = AVSED

A : 0

•*\rNIV t LCNVCH

SYMB (J) « PARDJ B J + 1

NIV B NIV - 1

IIND : 0

=

LINK=adresse tête de liste courante

SYJTO (J) = PARGJ = J-1

NIV = NIV + 1IND B 1

(J) = PARDautant de foisque NIV

FIN

LINK : LIEN (1)

iLINE : LIEN (I)

I de 2 à NIVO

SÏMB (J) = PARDJ «= J + 1SÏMB (j) = PARCJ = J + 1

*

reste-t-on dans la mène liste

la tête de liste courantea-t-elle déjà été rencontrée?

SÏMB (J) « DOMJ = J + 1

IND

A et B ont le3 BÔma niveau

alors 20

LIEN (1 ) = adresse tÔtede liste courante

1LIEN l) s adresses de toutesles têtes de listes

I de 2 à NIV

NITO s m

Fi«. II. 2.10

Page 41: SLIP: Langage de listes symétrique Applications

c

c

cc

MIL

AA

MG

AUX

FONCTION LWAGON (A,B,C,NA)

FONCTION LWAGON(LA»N1»N2»N3)ACCROCHAGE D'UNE CELLULE DE DONNEE SUPPLEMENTAIRE A LA DONNEE LANT=NUCELL(Z)SE CARACTERISE PAR UN 1 EN COLONNE INDEXAPPEL -lNSIN2(-l»-l»lt-l»LAiAPPEL INSIND(-1»-1»NT»LA-1)Nl,N2»N3 SONT DES NOMBRES DONNEES SUPPLEMENTAIRESAPPEL INSIND(6»N1»N2»NT)APPEL INSIND(0»N3»-1»NT-1)LWAGON=NTRETOURFIN Fig II 3.1

FONCTION 1CLTAB (AD,N,NA)

SOUS PROGRAMME MITAB(TAB,N,LA)ACCROCHAGE U « UN TABLEAU A UNE CELLULE DE DONiNEELE NOMBRE DE CELLULES DU TABLEAU ET SON ADRESSE SONT EN DONNEEAPPEL INSIND.(-1»MADD(TAB) ,N»LA-1)SE C A R A C T E R I S E PAR UN 2 EN COLONNE INDEXAPPEL INSIN2(-1,-1»2,»1,LA)RETOURFIN Fig II 3.2

FONCTION MIL (NA)

COMPTENTREESXARADSRARALDAGSRPRADDADEEXTRABCSFIN

MIL

AA

18AUXAUX15

DONNE LE CONTENU DE LA ZONE INDEX

Fig II 3.3

Presentation de données supplémentaires sous forme de cellules en chaîne

ou de tableau de données»

FONCTION INSIN2(A,B,C,D,NA) FONCTION RCELL (NA)

»INSIN2

1NSIN2

KA

SK

OL

BM

TI

AC

AD

TOI

BA

BC

BD

COMPTENTREESXARADSRARADDADSRASRASRASRASRARADSRASRARADADCTZERADDADSZITRARMÛSZIRADSRASRARADADDTZERADDAGERPTRARADSRPRADSRASRARADADDTZERADPDX

70INS1N2MG»<t5,4KA«»18TDITPGTDDDBBM3.4OKGLt »UNMBM**3AUXTI» *AUX1,4ACAD«*UNMTOIft»

15AUXBAft *AUX2.4BCBDw*UNMTDG* *u,l

CRCELL

FONCTION INDENT]QUE A 1NLIND MAIS AVEC UNPARAMETRE SUPPLEMENTAIRE EN ZONE INDEX

TDG

ÇA

ce

CD

TDD

DADB

MG

UN"AUX

SXDTRARADPDXSXDRADSRASRARADADDTZERADPDXSXATRARADPAXSXARADSOREEXTRAorTRTSFIN

AUX.lÇA* *c.lAUX.l4,4ceCD« «UNMTDDft »0,1AUX.lDAft*0,1AUX,1AUXft «*• ,46><t0000010000001 10

11

1213

SOUS PROGRAMME RCELL(A)N = 0APPEL INTRDD(A.NB)SIMILICONTINBI 1-1)7,9,8IMPRIMER 10SKMIL(CONTINB) 1-1)1,3,1NB = LSD(CONT(NB-1MN = N*1IMPRIMER 12.NSI (N-l)<t.5,<tLTCH=NUCELL(Z)APPPL INS!ND(3,MB,0,LTCH)APPFL INSINDIO,NB.O,LTCH-i)ALLER A 2

CAND-CONT(LTCH)D=CONT(LTCH-1)APPEL INSIND(-l.NB.LSUI.LTCH)APPEL INSINDI-1 ,-l,LCNVCH(LTCH)+l,LTCH-l )APPEL INTRDKCAND.LSUI )APPEL INTRDI tOiLSUI-1)ALLER A 2APPEL R2CELLII SG(CONTILTrH) ) ISI (LCNVCH(LTCH) 16,7,6M=LSn(CONT(LTCH) IAPPEL R2CELLILTCH)TU=CONT(LTCH)IMPRIMER 13>TULTCH=MALLER A 1APPEL R2CELLIA)RETOURLTAB = LSG(CONT(NB-1) 1LNB=LSD(CONT(NB-11 1IMPRIMER ll.LTAB.LNBRETOURMODELE! 34H ELIMINATION DiUNE T.UITE DE WAGONS)MODELEI37H ELIMINATION DiUNE SOURCE DE TABLEAU1LULES)MODELE! 16)MOnrLFI5X,3HTU=,012,//lFIN

17,4H DE , U.BHCEL

CR2CELLSOUô PROGRAMME R2CELLIA)COMM'JN CREFAPPEL INSINDI-1,-l,A,LSG(CREF)IAPPEL INSDIR( - I .A . - I .CREF)APPFL !NSIND(-1,-1,0,AlPF.TOUR

F I N

Fi* II 3.5 Fig II 3.4

Page 42: SLIP: Langage de listes symétrique Applications

C1

213579111315C1817

20

226810

SOUS PROGRAM!® TABSÏM (lA,TAB) TABSIH (LI, TABLE)

Entree

SOUS PROGRAMME TABSYM ( LA, TABLE)DIMENSION TABLE(50) »TAB(50)INTRODUCTION DES OPERANDESPLUS=2H++FOINS=1H-PROD=1H*DIV=1H/SINU=2HSNCOSI=2HCOPUIS«=2H**LES SYMBOLES UN»ZER,UNM SERVANT APRES DERIVATION SON? CHARGES EN TETETABLE=3HZERTABLE(3)=2HUNTABLE(5)«3HUNMJ=lLCH=LCRTCH(LA)EXPLORATION DE LA LISTETAB(J)^AVSED(LCH»A)IMPRIMER 10»TAB(J)

BAoonnaiss&nsoa dasdlTora operataura+.-.*,/f»tsnrtoos

La tata de liai»TABLE ^ tàbloau das

ayobolea

_ » ~—?Creation du suiveur LSI 9

J T A B (J) » AVŒD (LCH.A) Tableau auxiliaire de tousles syabolea et opérateurs

J « J + 1

A t 0 Fin da la structure

K - 1> I

j TO - J J.I |

S!(A)2»1»2NO-JIMPRIMER 6tNO

SI(TAB(J)-PLUS)3,4,3SI(TAB( J)-FOINS)5»4,5SI (TAB( J)-PROD)7,4»7

SI(TAB(J)-SINU)11,4,11SI(TAB( J)-COSI )13»4,13SI(TAB(J)-PUIS)15,4,151 = 1RANGEMENT DES SYMBOLESSI (TAB( J)-TABLE(I))17f4,171=1+2SI (I-K)18»20,20TABLEtK)sTAB(J)IMPRIMER 8»K,TABLE(K)

J=J+1SI (J-NO)21»22,22RETOURMODELE(5X»3HJ= »I39//)MODELE(5X,6HTABLE(,I2,2H)»,A6,//)MODELE(5X»7HTAB(J)=»A6)FIN

III 5

1X TAB (J) I +\.

TAB (J) t -

TAB (J) I *

TAB (J) t /

TAB (J) >**

"WT

TAB (J 003

- TAB (I) I 0

TABLE (K) - TAB (JT

• K + 2

Synbole differentdasopérateurs

Sysbolo déjà rencontré

Chargement da la tablades syssboles toutes lesdeux ώaoiros

J - J + 1

\Fis. ni 6

Page 43: SLIP: Langage de listes symétrique Applications

- 53 -

II-4 - DICTIONNAIBES

Le problème d'optimisation du temps de recherche d'une fiche

dans un fichier ou d'un mot dans un dictionnaire est un problème

important et souvent rencontré. Un fichier est un ensemble de données

disposées en séquence (à la suite l'une de l'autre) dont on doit

extraire l'une d'entre elles après avoir défini son contenu. C'est

donc dans le cas général une recherche séquentielle, en testant la

valeur de toutes les données l'une après l'autre, jusqu'à ce qu'on

trouve la valeur cherchée, ou bien que l'on trouve la fin de fichier

ce qui imprime un diagnostic.

On peut améliorer cette méthode en procédant suivant une tech-

nique directive , par test de valeur supérieure ou inférieure, ce

qui divise le temps par un facteur logarithmique. Cependant le temps

de recherche est ici directement fonction et fonction croissante du

nombre de données. L'avantage est que l'encombrement du programme

est très réduit, et que l'on peut donc charger un grand nombre de

données dans l'espace disponible qui est maximal.

Cependant, le temps de passage machine n'est pas suffisamment

rapide dans de nombreuses applications, et on a été conduit à chercher

d'autres méthodes plus rapides, et moins dépendantes du nombre de

termes. L'une d'entre elles nous a semblé la plus valable : ne pas

composer des noms entiers, ce qui peut amener à N comparaisons (si N

mots - ou N/2, si on fait une comparaison pondérée) mais, comparer des

lettres ce qui ne fait que 25 possibilités (ou 12 si on pondère) donc

un nombre maximum de 25 N comparaisons si le mot a N lettres. Nous

allons donc étudier le détail de ce procédé, qui dans toute recherche

de fichier, de dictionnaire , de bibliographie, se révèle très intéres-

sant.

On ne peut loger un nombre très grand de,mots en machine pour

un traitement. La capacité de la machine, après chargement des pro-

grammes, permet de loger environ 500 mots et leurs traductions. Comme

on a en général affaire à un plus grand nombre de termes, de mots, de

fiches on doit donc les mettre en mémoire auxiliaire, - pour

Page 44: SLIP: Langage de listes symétrique Applications

l'exemple traité, des bandes magnétiques. Ceci pose des problèmes

très complexes car les adresses figurant sur les pointeurs des listes

sont des adresses absolues et qu'il faut s'assurer de la concordance

des positions des cellules lors de la lecture des bandes avec la

position précédemment occupée. La structure que nous avons adoptée

pour la constitution des listes est la suivante

- 55 -

Cette structure correspond à un niveau par lettre, chaque

lettre pouvant avoir 26 sous-listes (toutes les lettres) au maximum.

Les roots sont séparés en lettres par la fonction MOTLU (fig. IV.1.1 -

fig. IV.1.2 ). L'adresse de tête est donnée par une cellule inaliéna-

ble, qui pointe vers le premier embranchement vers la 1ère lettre....

Chaque lettre peut donc servir à plusieurs roots. Par exemple :

ABRI et ABAT divergent au R et A, ayant AB en commun,

FIIET et FIIER divergent à la dernière lettre. Lorsque l'on veut

retrouver un mot, on teste donc lettre par lettre, en commençant par

la première, avec 26 possibilités au maximum à chaque fois, plus le

critère de fin de mot (blanc). Dans cette fin de mot, on loge

l'adresse de la traduction correspondante (ordre dans un tableau,

adresse du mot traduit, adresse d'une liste de propriétés). Nous

avons choisi un numéro dans un tableau.

Lors de la constitution des listes, on doit se préoccuper de

la place dont on dispose en liste d'espace disponible. On peut se

fixer des critères au départ, on ne se préoccupe que de l'épuisement

de la réserve, mais ceci aurait l'inconvénient de faire plusieurs

listes distinctes, et au moment de la recherche d'un mot, on devrait

chercher successivement dans ces différentes listes. Nous avons donc

préféré utiliser à priori un critère permettant de loger certains

mots dans une liste (sur bande I), d'autres sur une seconde liste

(sur bande II) etc.... (Fig. IV.1 , IV.2 ) en se fixant le

nombre de divisions a priori, suivant le nombre total de mots à loger.

Lf inconvénient de ce système est que les structures sont figées, mais

l'avantage est que le nombre de mots maximum n'est pas atteint dans

chacune des structures, ce qui fait que l'on peut, dans des limites

raisonnables, compléter la liste.

En consultation, on utilise le même critère de sélection pour

n'appeler que la liste dont on aura besoin, cette liste sur bande est

mise en mémoire centrale et on travaille alors comme sur une structure

que l'on vient de créer, (Fig. IV.3 - IV.4 , organigramme), que

l'on attaque par la tête de liste principale, seule adresse à trans-

mettre.

Page 45: SLIP: Langage de listes symétrique Applications

- 56 -

/Bien que le temps df accès d!un mot soit dépendant du nonibre

de mots, il n'est pas proportionnel à ce nombre. Le temps d'entrée -

sortie est évidemment nettement supérieur au temps d'accès d'un mot,

ce qui fait que la courbe tr^(N) est de la forme t = a ISJt to

droite de pente très faible

Pour pouvoir Juger de l'intérêt que présente une telle classi-

fication nous avons jugé utile de présenter parallèlement un traitement

de structure séquentielle avec les mêmes nombres de mots. Le temps

d'entrée - sortie est aussi supérieur au temps d'accès, mais dans

de moins grandes proportions, ce qui fait que la courbe t -§(N)

est aussi une droite, mais de pente supérieure. Ces deux courbes

sont sécantes pour 400 mo^s' ( ig» IV.201.)

Des corrections sont cependant à apporter à cette comparaison,

car le nombre de mémoires occupées par le programme de traitement

séquentiel est de beaucoup inférieur à celui que prennent le programme

de traitement en liste accompagné de son jeu de sous-programmes. Avec

les méthodes adoptées, on peut loger en mémoire 1 500 mots, en séquence

contre 500 mots seulement en liste. Lorsque l'on appelle deux mots

successivement, on doit tenir compte de la probabilité qu'ils soient

dans le même bloc, probabilité de ne pas avoir à entrer en mémoire

rapide des informations contenues en memoir® auxiliaire. Elle dépend

d'une part du nombre total de mots (pour r» 500 en liste ou

h 1 500 en séquence, il est inutile d'avoir un stockage auxi-

liaire) et d'autre part de la probabilité de présence de la première

lettre, qui dépend de la fréquence de cette lettre dans le vocabulaire

utilisé. Pour un dictionnaire français, elle est : . (fig. IV.2.2.)

Exemples d'utilisation donnant la liste et les résultats : fig. IV, 5 et

fig. IV.6.

100

50

30

20

10

0

Temps mari en

Temps moyen en séquence

Temps mari en liste

TTemps moyen en liste

100 200 300

Courbes donnant le temps d1accès aux mots pourun nombre de mots inférieur à 300 avec les impressions

Tm = Ta + ta

Tb + ta

- "lin liste

En séquence

sans impression intermédiaire

X) 3000 4500 6000 N

Page 46: SLIP: Langage de listes symétrique Applications

- 57 -

A B C D B P G H I J K L M N 0 P Q R S T U V W X I Z

fig. IV.2.2.

Pour n petit, la probabilité est non négligeable (5-» , £••••)

Pour n grand, elle devient négligeable.

On pourrait donc être conduit à faire une mise en mémoire

auxiliaire sélective, avec conservation en mémoire rapide des mots

correspondant aux premières lettre C et P (et AESMRT accessoirement),

si le nombre total de ces mots à grande fréquence n'excède pas la

moitié de la capacité soit 250 mots environ. Ceci nécessite un calcul

de probabilités assez important, qui est fondamental si on veut opti-

miser le temps de réponse du système j par exemple en cas de travail

direct : appel par les différents usagers du fichier - gestion inter-

médiaire des priorités d'appel - résultats à fournir dans le plus

bref délai pour éviter des encombrements. On peut aussi loger les

mots les plus fréquemment appelés sur disques, et les autres sur bande,

à rythme de transmission inférieur. Ceci est cependant cas d'espèce.

Page 47: SLIP: Langage de listes symétrique Applications

CREATION DBS LISTES DE DICTIONNAIRE

MISE SUR BANDE

DIMENSION LAVS<2)»X<100),M(18ï »LETTRE(3) tA<4500)COMMUN CREF»X»LAVSAPPEL INITEDL=LISTE<9)MT=48

APPEL PLACER (700t32+NA)LIRE 110.N1.N2MN=12*N1-11NM=12*N2LIRE 101.CAU) »I=MN,NM)FAIRE 1 I=N1»N2LIRE 1 0 » « L E T T R E < I ) f I = l * 3 ) » N OIMPRIMER 11«<LETTRE(I )» I=1*3)J«lAPPEL MOTLU(LETTRE»M)SI(M-3Ô)100»1»1

100^ LCH*LCRTCH(L)5 EMB«AVLND(LCH,A)

M1*LSG(CONT(LSG(EMB)-1) )SI (LSG(EMBi-LSD(EMB))6»7,6

7 S I ( M ( J ) - M T ) 1 4 t 3 t l 414 SKMl-M(J) )3 .4»34 SI (M(J) )30tl.30 ^30 CC=AVSND(LCH,A)

J=J+1MlsLSG(CONT(LSG(CC)- l> )ALLER A 7

3 S I ( A î 6 » 5 , 66 LT*LSG(CONT(LCH-l î )

APPEL I N S D I R ( 0 » L T t L T f L T )8 LIC=LISTE(9)

NV*NVQU(LK»LT)LT«LKAPPEL INSlND(-ltM(J)t-ltLK-l)SI(M(J)-MT)9.1t9

9 J«J+1ALLER A 8

1 APPEL INSIND(-1»MT9NO»LK-1)APPEL IMPLST(LoLAtLB,LC,LD)FAIRE 51 1=1*6LIREBANOENA

51 IMPRIMER 77INSCRBANDENA»CREF»(LAVS(I ) *I«1»450Q)INSCRBANDENA,L»(X(I)»I»1,10Û)INSCRBANDENA,', A< I )»I»1»4500)REBOBINERNAAPPEL EXIT

10 MODELE C 3A6,6X* 13)11 HODELE(3(5X«A6)o//)77 MODELEC14H LECTURE BANDEî101 MODELE! 12A6>110 MOOELE(I3«9R«I3)

FIN Pi. IV-1

Page 48: SLIP: Langage de listes symétrique Applications

FONCTION MOTLU

OOC02 ENTREE MOTLU

MAILLON DIRECTEUR00000 00000000000000001 444663436460

000020000300004000050000600007000100001100012000130001400015000160001700020000210002200023000240002500026000270003000031000320003300034000350003600037000400004100042

0634 00 4 000320634 00 1 000330634 00 2 000340500 CO 4 000010621 00 0 000130500 CO 4 000020621 00 0 000220774 00 1 000000774 CO 2 00000

-0500 00 1 000000602 00 0 000420500 00 1 000400622 00 0 00027

-0500 CO 0 00042-0320 00 0 00041-0765 00 0 000140602 00 2 00000-0500 00 0 00042-0763 00 0 000060602 00 0 000421 00001 2 00027

-3 00000 2 000171 00001 1 00031

-3 00002 1 000130774 CO 4 000000774 00 1 000000774 00 2 00000OC20 00 4 00003+000021000000+000013000000+000005000000-370000000000

MQTLU SXASXASXARADSRARADSRAEEXEEX

AE RALSRLRADSRD

AA RALETAOLQ

KE SRLRALDLOSRLTXA

AD TXITXATXI

MG EEXEEXEEXTRAOCTOCT

NA OCTMAX OCTAUX1 8CS

FIN

RESULTATS

ARBREOOAOOO00 00000 000ANTIDOOOAOOOOOTOOO00 000PERIGROOPOOO001000OONOOOMUNICIOOMOOOOOPOOO00 000CONFESOCCOOOCOSOOOOOLOOOREVOLUOOROOOOOTOOO001 000

OOROOO00 00000 000TESOONOOOOOEOOO00 000INATIOOOEOOOOONOOO00 000PALOOUOOOOOAOOO00 000SIONNA00000000100000 000TIONNAOOEOOO001000OOROOO

OOBOOO00 00000 000

OCTOOOOOSOOO00 000NOOROOOOOAOOO00 000

OONOOOOOLOOO00 000LOONOOO00000000 0001RESOOVOOO000000OOEOOO

OOROOO00 00000 000

00100000 00000 000

001000OOTOOO00 000

00100000 00000 000

OOFOOOOONOOO00 000

000000OONOOOoosooo

M G T 4PG+1,1M G + 2 , 21,4AE2,4KE0,10,2**,!AUX1NA,1ADAUX1MAX12

AUX16AUX1* + l t 2 f lAA,2,*«

AE,1 ,2

**!l

3,400002100000000001300000000000500COOO77000000000C1

Pig IV 1.1

OOEOOO00 00000 000

OODOOO00 00000 000

OOGOOO00100000 000

oocooo00 00000 000

OOEOOOOONOOO00 000

OOLOOOOONOOO00 000

00 00000 00000 000

00000000 00000 000

OOROOO00000000 000

00100000 00000 000

oosoooOOAOOO00 000

oouoooOOAOOO00 000 Pig IV 1.2

il

SI

1

1

DICTTOmiEE TES MOTS DE A à L

CREATION DE LA LISTE

Placer Wsnde

Ij L » Liste (9)I

Lire le n* des cartes

Fin quand plusaucune donnéeMiae sur bandeMettre dano la oollulecréée le syabole blanc

Lire lea'données correspondanteslea placer dan» le tableau

ï

en place destraduction»

Lire le act et son nunéro

Appel MOH.ÏÏ >Tableau des lettres K (l)

Séparation en lettres

TTXM (1 ) t L

Créer le suiveur

KMB « AVLND (LCH,A) descente linéaire dans laliste d'-.me cellule

Ml » Symbole de latôte de liste inférieure

EMB t nom de listenon

rui

M (J) t blanc

aon

MI i M

pot tcraini 7

Lattre courant» « Ht T

Fin da lalist* linéaire

[ CC - AYSHD (LCH,A)

J - J + 1

1 ïM1 - Symbole de la

tôte de liste inférieure

deocante structurelledans la liste d'1

LT a adrmuede la tôt» deListé oeonnte

LT m de liste

LuréVir uns

marelle liste IX.

la rattacher a.U list* HT

Rtttr» la lettre H (j) dcaala tâtfl te lista créés

cal H (J) t blanc

172 y™J » J + 1

LE

Page 49: SLIP: Langage de listes symétrique Applications

100

5054

5158

5652

57

5

86

910

231112

CONSULTATION DES LISTES

DIMENSION L A V S ( 2 ) » X ( 1 0 0 ) , M ( 1 8 ) , L E T T R E ( 3 ) » A (4-500 >COMMUN C R E F , X , L A V 5NA = 5APPEL PLACER (700,32+NA)

N=lLIRE 2, (LETTRE( I ) ,1 = 1 ,3)IMPRIMER 3,(LETTREtî) ,1 = 1,3)APPEL MOTLU(LETTRE,M)SI (M-36)50,51 ,51SI(N)54,57,54N = 0NOS = 6ALLER A 56SI (N-l)58,57,58N=lNOS = 9ALLER A 56FAIRE 52 1=1,NOSLIREBANDENALiREBANDENA,CREF,(LAVS(I),1=1,4500)LIREBANDENA,L,(X(I),1=1*100)LIREBANDÊNA,(A(I),1=1,4500)REBOBINERNAJ=lL C H = L C R T C H ( L )E M B = A V L N D ( L C H , A )M 1 = L S G ( C O N T ( L S G ( E M B ) - 1 ) )SI (M1-M(J) ) 5 , 8 , 5SI ( M ( J î - M T ) 6 , 1 0 , 6C C = A V S N D ( L C H , A )

M 1 = L S G ( C O N T ( L S G ( C C ) - 1 ) )SI (M1-M( J) ) 5 , 9 , 5SI ( M ( J ) ~ M T ) 6 , 1 0 » 6N O = L S D ( C O N T ( L S G ( C C ) - 1 ) )IMPRIMER 11, NON I = 1 2 * N O - 1 1M=12*NOIMPRIMER 12, ( A ( I ) ,I=NI ,M)APPEL HEUREALLER A 100M O D E L E ( 3 A 6 )M O D E L E ( 5 X , 3 A 6 )MODELE (5X»16HNUMERO DE CARTE =M O D E L E ( 5 X , 1 2 A 6 , / / )FIN

I 5 , / / )

Fig. IV-3

DICTIONMEHE

LECTUEE DES MOTS DE A à Z

Entrée

1

Lire le oot à traduire

Lo décomposer en lettres M (j)

H(î).lL ^—,

Appeler la bande correspondante!

de A à L ou de L à Z

enregistrements = suivantla 1 ère lettre

Suiveur LCH pointe en tôte j

EMB = AVLND (LCH,A) recherche embranchement suivantde la liste courante

M1 «= symbole du correspondant

M1 t M (J)

(J) t Blanc

1CC = AVSND (LCH^Sj

J = J + 1

j Ml = synbole correspondant

^ Mî î H (J)

I< M ( J ) t KT -

?

descendre de 1 niveauarrêt au 1er embranchement

Lecture de 1*adressede la traduction

si on est en fin de mot(blanc) le symbole blancdonne l'adresse traduction

! Itqjrossion

~TÏIH

. IV 4

Page 50: SLIP: Langage de listes symétrique Applications

LISTE DE DICTIONHAUffi Mots commençant par H

LA-077315077315 L3-000000000000 LC-000000000000 LO-OOOOOOOOOrOO LE-000000000000•

273507077307 000000000000

177315077163 077311077311

272651077303 0000*1.000001 |

1773110772*7 077305077305

272527077277 000031000001

177305077205 0773010773pl

177277075657 077207077207

177205072527 075661075661

175657077305 '072531072531

177303076701 077251077251

1772*7076625 076703076703

17670107*01} 076627076627

176625072651 07*01507*015

17*013077311 07265307265J

2772*30772*3 000070000001

177251077251 0772*50772*5

2765*5076675 0000*6000001

1767030765*5 076677076677

176675076703 0765*70765*7

273005076621 000021000001

176627076573 076623076623

1766*1075615 076575076575

176573073077 073617073617

173615073005 073101073101

173077076627 073007073007

27*00707*007 000025000001

17*01907*015 07*01107*011

2725710726*5 00006*000001

172653072571 0726*70726*7

1726*5072651 072573072)73

277273077273

177301077301

277201077201

177207077207

2727*5075653

1756610727*5

175653075661

272523072523

172531072531

277237077237

1772*50772*5

273655076671

176677073655

176671076677

2765*10765*1

1765*70765*7

2730*7076615

17662307*317

1766150730*7

17*317076623

276567076567

176575076575

273611073611

173617073617

27)073073073

173101073101

273001073001

173007073007

27*00307*003

17401107*011

2726*10726*1

1726*70726*7

000051000001 i

077275077275

000063000001 j

077203077203

000023000001 c

075655075655

0727*70727*7

000062000001 g

072525072525

000062000001 3

0772*10772*1

0000*5000001 j

076673076673

073657073657

00006*000001 „

0765*30765*3

000063000001 T

076617076617

07*32107*321

073051073051

000051000001 j

076571076271

0000*5000001 f

073613073613

0000**OD0001 H

073075073075

000023000001 g

073003073003

00002*000001 ,

07*00507*005

0000*5000001 I

0726*39726*3

27156507J565 000062000001 I

Fig IV 5

3$.*(

tm

•»

DE RECHERCHE DE TRADUCTIONS

Impression du mot à traduire,de son numéro,de la traduction et de l'heure

B A T E A UNUPERO DE CARTE= 3

B A T E A U = QUI FLOTTE PLUS OU MOINS

HEURE = 02963334 SOIXANTIEMES DE SEC = 082315 CENTIEMES DE PINAEROPLANENUMERO DE CARTE= 15

A E R O P L A N E = AVIONfPLUS LOURD OL'E L 'A IR

HEURE = C2963338 SOIXANTIEMES DE SEC = 082315 CENTIEMES DE PINCRAVATENUPERO DE C A R T E = 10

CR/ IVACKE = OUI FA IT MAL MAIS CCNNE DE BONS RESULTANTS

HEURE = 02963242 SOIXANTIEMES DE SEC = 082316 CENTIEMES DE PINT A R T A R ENUMERO DE CARTE= 56

082316 CENTIEMES DE PIN

T A P T A R E = COMME UN STEAK,ASIAT IQUE

HEURE = 02963346 SOIXANTIEMES DE SEC =T R C U V E RNUMERO DE CARTE= 51

T R C U V E R = LA FIN Pf LA RECHERCHE

HEURE- =-0246.3350 SOIXANTIEMES OE SEC = 082316 CENTIEMES DE P.ÏNZOENL'PERQ DE C A R T E = 54

082316 C E N T I E M E S DE PIN

082316 CENTIEMES DE MN

ZCE = PILE

HEURE = 02963354 SOIXANTIEMES DE SECORCUENLPEPO DE CARTE= 60

INSTRUMENT DE ML'SIOUE EN EGL1ÏF

HEURE = 0296335P SOIXANTIEMES DE SECZEPHYRNUPERO DE CARTE= 53

ZEPFYR = V f N T OUI P L I E "

HEURE = C2963262 SOIXANTIEMES DE SEC = 082316 CENTIEMES DE PINCALMENUPERC DE CARTt= 9

CALME = PAS BRUYANT

HEURE = C2963366 SOIXANTIEMES DE SEC = 082316 CENTIEMES DE PINODE3296NUPEflO DE CARTE= 65

082316 CENTIEMES DE PIN

C A T t - E R I N E C R I S E L

HEURE = C2963370 SOIXANTIEMES DE SECNI/GIRANUHERO DE CARTE= 118

ENDROIT DES CHUTES

HEURE = 02963374 SOIXANTIEMES DE SEC = 082316 CENTIEMES DE PINGENERALNUPERO DE CARTE= 95.

GEKERAL = GRAND CHEFtAOJECTIF

HEURE = 02963378 SOIXANTIEMES DE SEC = 082317 CENTIEMES DE PINChENILLENUPERO DE CARTE= 108

C h E N I L L E x A V A N T P A P I L L O N

HEUkt = 02963382 SOIXANTIEMES DE SECBROUDINYVONNUPERO OE CARTE= 123

082317 CENTIEMES DE PIN

25 A V E N U E R E I L L E P A R I S 14 ..951 80 00 P 3O 08

HEURE = C2963386 SOIXANTIEMES OE SECPAS7520NUPERO OE CARTE= 139

COLETTE L E P E R R I E R

HEURE = C2963390 SOIXANTIEMES DE SECVENTNUMERO DE CARTE* 131

MOUVEMENT OE L'AIR .

082317 CENTIEMES OE MIN

082317 CENTIEMES DE MIN

Fig

Page 51: SLIP: Langage de listes symétrique Applications

- 58 -

II-5 - CALCUL DE LA VALEUR D'UNE FONCTION REPRESENTEE PAR UNE LISTE

Ce problème est directement lié à l'étude des listes de symboles

faite à un chapitre précédent dont nous avons donné le principe et

aussi au calcul de la dérivée formelle d'une fonction, dont c'est la

suite logique. Cependant, ce problème est plus simple, et sera utilisé

dans le cas de calcul de la dérivée, c'est pourquoi nous l'étudions le

premier.

Pour pouvoir travailler aisément sur des listes de symboles

représentant des fonctions, il est commode - voire indispensable -

d'exprimer ces fonctions sous forme "polonaise préfixée". C'est-à-

dire que la fonction ;

AX^ + B Cos(Cx + D)+ E s'écrit en notation polonaise

(+ (*. A(**, X, 2)) (+ (*,B (Cos (+ (*,C,X) D))) E))

2Ï2lT~~'> iï2f11212

2 1

farI

21211 « C.X

21212 = D

2121 = C.X + D

12 = X2

11 = A

II = A.X2

212 = Cos(C,X + D)

211 = B

21 = B.Cos(C.X + D)

22 = E

1 2 = B.Cos(C.X + D) + E

I = A.X2 + B.Cos(CX + D) E

Exprimée sous cette forme, une expression ne relie que 2 termes

à chaque niveau, c'est-à-dire que A + B + C s'écrit (+A(+B, C)).

Ceci s'applique donc parfaitement à une procédure de listes de deux

sous-listes au maximum, en plus de l'opérateur, et suggère un traite-

ment récursif. VAIEUR (+(+A, B) C)

se calculerait : VALEUR (VALEUR (A + B) + VALEUR (C)) .... etc

- 59 -

Le programme de calcul de valeur ne s'arrêtant que quand il trouve

un terme simple, terme dont il extrait la valeur numérique, puis

remontant de niveau en niveau, calcule la valeur du second terme,

remonte ainsi jusqu'au niveau zéro et sort. Le programme VALEUR

réalisant ce travail a d'abord été écrit en FAP (où il a donné les

résultats attendus - fig. V.8) accompagné du sous-programme de

service VAL - fig. V.4 - qui sert d'intermédiaire pour l'appel

récursif, puis a été écrit en FORTRAN, en tournant, par un artifice,

l'impossibilité de connaître l'adresse d'où une fonction a été

appelée, de façon à la mettre en réserve dans la pile. Cette façon

de procéder est plus courte à programmer, mais plus longue à mettre

au point et demande un temps machine plus conséquent (fig. V.2 -

organigramme fig. V.3>). Les résultats sont cependant intéressants

dans les deux cas.

Dans le cas du sous-programme en FORTRAN, la fonction FLSTP

a été utilisée, de façon à standardiser la présentation et à simpli-

fier le programme principal. L'accès aux valeurs numériques se fait,

comme on l'a vu, lorsque l'on a étudié les symboles, grâce à la fonction

VALO (Fig V Q] explorant une table des symboles de la liste, obtenue

par TABSYM dans laquelle on a inclu les valeurs numériques en corres-

pondance avec les symboles eux-mêmes. Quand la fonction rencontre

le symbole qu'elle cherche (qu'elle a extrait de la liste), elle prend

sa valeur et la communique à VALO puis à VALEUR, et le traitement

continue. Programme Principal fig. V.7 - Résultats fig. V.6.

La fonction Valeur étant rappelée plusieurs fois, avant d'être arrivée

à sa dernière instruction, on doit donc conserver les valeurs non encore

utilisées, les résultats partiels et les adresses de retour, donnant

1»adresse machine d'où la fonction a été appelée, afin de permettre la

fin du traitement. L'adresse de retour est donnée par l'index 4 qui est

logé en tête de programme. Pour l'extraire, on a dû créer la fonction LADDRE,

Las quantités à mettre en réserve dans les listes piles communes (x(l))

sont : le symbole d'opération SYMB les 2 adresses des sous listes ou des

Page 52: SLIP: Langage de listes symétrique Applications

- 60 -

paramètres IS1, IS2, l'adresse de retour CONT (LN) et le résultat inter-

médiaire du premier appel récursif ST01.

Quand on revient à la fonction après l1avoir quitée par appel

récursif, on récupère dans les listes piles tous ces symboles, pour les

utiliser avec leur valeurs correctes à ce stade de travail. La mise en

réserve est faite par PARMT6 PAKKTf. La récupération par RESTR6, RESTE?.

On retourne au programme principal quand les listes piles sont vides et

on a ainsi le résultat.

I

A•is

1

5

fe

»

CALCUL DE LA VALEUR D'UNE PONCTION

Programme principal

CVALTAB VALEUR D'UNE EXPRESSION PAR TABLEAU DE SYMBOLESDIMENSION X(100)»LAVS(2),LETTRE<36) .MOT (2 16) » TABLE (50)COMMUN CREF,X,LAVSAPPEL INITEDLIRE 1. LETTREIMPRIMER 1. LETTREAPPEL SEPARE(LETTRE.MOT)APPEL FLSTP(MOT-AA)APPEL IMPLST(LA»D,D,D,D)L=LISTE(9)APPEL INSIND(-1,LA,LA,L-1)APPEL TABSYMl LA, TABLE)FAIRE 10 1=2,10,2LIRE 11,TABLE(I )IMPRIMER 14, TABLEV=VALEUR(L, TABLE)IMPRIMER 13, VAPPEL E X I TMODELE(1X,11A6)MODELECF6.3)MODELE (5X,2HV=,E12. 4)MODELE(5(5X,012))FIN

10

11113

Fig. V. 1

Page 53: SLIP: Langage de listes symétrique Applications

100102103104105106C101C

C

C

12

3456C8

10

11

12

15

13

14

C717

20110111112113

PONCTION VALEUR

FONCTION VALEUR (LA, T)D I M E N S I O N MG(2)INTRODUCTION DES SYMBOLES OPERAI IONPLUS=2H++FOINS=1H-PROD=1H*DIV=1H/SINU=2HSNCOSI=2HCOPU1S=2H*«RECHERCHE DE LA MEMOIRE OU EST STOCKEE L'ADRESSE DE RETOJRL N = L A D D R E ( L A )IMPRIMER 110, LNSB=CONT(LA-1)IDD=LSG(CONT(LA-1 ) )RECHERCHE DU SYMBOLE OPERA I EuR ,DEo ADREooEo DEo oOuo L I o i E iSYMB=CONT(LSD(CONT( IDD) )-l)APPEL INTRDD(SYMB.LYMB)APPEL INTRDD(PLUS.LUS)APPEL INTRDDIFOINS, MOINS)APPEL INTRDD(PROD.MROD)APPEL I N T R D D ( D I V » N I V )APPEL INTRDD(SINU»INU)APPEL INTRDDICOSI «LOSI )APPEL INTRDD(PUIS»MUIS)IS1=LSD(CONT(LSD<CONT(IDD) M )IS2=LSD(CONT( IS1) )I M P R I M E R 20»PLUS»FOINS»DIV,PROD,SINU,CObI ,PuIb»brMBSI (LYMB-LUS 1100,101,100SI (LYMB-MOlNS) 102»101,102SI C.YMB-NI V)103»101,103SI (LYMB-MROD>104»101»104SI (LYMB-INU)105»101,105SI (LYMB-LOSI 1106,101,106SI (LYMB-MUIS)7,l01 ,7MISE EN RESERVEAPPFL P A R M T 4 I C O N T I L N ) » ISl, IS2»i>YMB)APPEL RECURSIFST01=VAL(IS1,T)IMPRIMER lll.STOlRECUPERATION DE LA PREMIERE MISE EN RESERVEAPPEL RESTR4(MG»IS1,IS2»SYMB)APPEL INTRDI(MG,LN)SECONDE MISE EN RESERVE DANS LES PILESAPPEL PARMT5(CONT<LN),IS1»IS2.SYMB,ST01)DEUXIEME APPEL RECURSIFST02=VAL(IS2,T)IMPRIMER 112.ST02RECUPERATION DANS LES L I S I E b PILEsAPPEL RESTR5<MG»IS1,IS2»LYMB»ST01)APPEL INTRDI(MG»LN)A I G U I L L A G ESI (LYMB-LUSll.8,1SI (LYMB-MOINS)2,10»2SI ( L Y M B - N I V » 3 » 1 1 » 3

SI (LYMB-MROD)4»12»4SI(LYMB-INU)5,15»5SI (LYMB-LOSI)6,13,6SI <LYMB-MUIS)7,14»7OPERATIONS ET RECHERCHE DE LA vALEuR PARiIELLEVA=ST01+ST02ALLER A 17VA=ST01-ST02ALLER A 17VA=ST01/ST02ALLER A 17VA=ST01*5T02ALLER A 17VA=SINF(ST01)ALLER A 17VA=COSF(ST01)ALLER A 17VA=ST01**ST02IMPRIMER 114»ST01»ST02ALLER A 17RECHERCHE DE LA VALEUR D,UN SYMBOLEVA=VALO(SB,T)V A L E U R = V AIMPRIMER 113, VARETOUR 'MODELE(7(1X,012),3X,5HSYMB=,O12)MODELE! 5>H LN= ,012)MODELE16H ST01= ,012 »/ / )MODELE(6H ST02= ,012 , // )MODELEI5H VA=,012,//1MODELE ( 5X,5HSTO1=»F8.4»5HST02=»F8.5)FIN

FONCTION VALEUR (L, TABLE)

SÏHB = opérateur SB = Symboledu niveau considéré

151 « adressa 1er terne

152 « adressa 2e terra

I

Pig. V»2

SWB t +

_=/ STUB j -Mise en réserveST01 = Valeur (lS1)RécupérationMise en réserveST02 = Valeur (lS2)RécupérationVA = ST01 + STO2

>

Mise en réserveST01 = Valeur (IS1)RécupérationMise en réserveST02 = Valeur (lS2)RécupérationVA = ST01 - ST02

SYJΠi *

SYHB i /

SYKB i SIN

SÏMB : COS

SÏMB i * *

Mise en réserveST01 = VALEUR (IS1 )RécupérationMise en réserveST02 = VALEUR (lS2)RécupérationVA a ST01 * ST02

Mise en réserveST01 = VALEUR (lS1)RécupérationMise en réserveST02 = VALEUR (lS2)RécupérationVA = ST01 / ST02

Mise en réserveST01 = VALEUR (lS1 )!RécupérationVA = SINP (STOI)

Mise en réservaSTOI = VALEUR (lS1)RécupérationVA = COSF (ST01)

Mise en réserveST01 « VALEUR (lS1 )RécupérationMise en réserveST02 = VALEUR (lS2)RécupérationVA = ST01 ** STO2

VA = VALO (SB) TABLEValeur numérique dusjrmbole considéré

VALEUR = VA

VSortie

. V 3

Page 54: SLIP: Langage de listes symétrique Applications

FONCTION LADDRE

*VAL

VAL

AAAB

MGB

AUX

COMPTENTREESXATEDRADSORRADSRATEDRADSRATSXTSXTSXTSXTSXSORTEDTSXTSXRADEEXTRABCSFIN

18VALMGB»4=HENTVAL$( IMP)21,4AA=HAAVAL2.4.ABSPÂRMT8»MGBSVALEUR?***#AUX=HAUXVALSRESTR8»MGBAUX** »43,41

PONCTION VAL

*LADDRECOMPTENTREE

LADDRE SXARADSRARADDAGSSTTRA

MG EEXAUX BCSDEUX OCT

F I N

12LADDRE

ÎVALEURAUXAUX18DEUX

Pig. V-4

000002000000Pig. V-5

PONCTION VALO (SÏMB, TABLE)

Entrée

_L1 = 1 .

SYMB - TABLE

V1 = 1 + 1 VALO = TABLE CI + D]

PIN

Extrait de la table des symboles : TABLE (N) la valeur du symbolequi lui est adjacent

Pig. V 6

31

FONCTION V A L O I L B f N )DIMENSION N ( 5 0 )1 = 1SI ( L B - N U ) ) 1 * 2 , 11 = 1+2ALLER A 3NALO=N(1+1)APPEL INTRDD(NALO,VALO)IMPRIMER 5 » L B , N ( I ) , V A L ORETOURM O D E L E ( 5 X » 3 H L B = , A 6 , 5 X , 2 H N = 9 0 1 2 , 5 H V A L O = , F 5 . 2 , / / )FIN

Pig V7

Page 55: SLIP: Langage de listes symétrique Applications

RESULTATS Z = 7

«OCRE ( 0)-C11313CCOOCC- 0.1C146730E-19 «00 01-077313000000- 0.10746730E-19

SYMB ( OI -CC2CCCOOCQCC- O.OOOCOOOOE-38077AOC463374 C713C7COOOOO C77305000000

«00 (

«UX3A8I

0)-0021COOOOCCO- 0.14693679E-38

OI-OM574CCCOCC- 0. 89337571E-35

ADDPE ( 01-002100014574- 0.14699353E-38

SYHi! ( 01-060000000000- O.OOOCGCCCE-24

VAS ( 01-202600000000» 0.30000CCCE Cl

077400463314 C71307COOOOO 077305000000C114CC't3314 C173C7CCOOOC C77305000000 202600000000

ADORE ( OI-077311C71311- C.106474C6E-19

SYMB ( 01-CC2CCCCCCCCO C.CCOCCOOCE-38C77400473332 C77277000000 077303000000

AOO ( OI-0773C1CCCOCC- 0.10217334E-1907740C473332 C11275COCCOO C77271000000

«DORE ( OI-OC22C0014Ï71- 0.293S3C69E-38

SYHB ( 0) -OS646CCCCOCO- 0.12278461E-24

VAS C 0)»2024COOCCGCO C.200COOOOE 01

ADD I

ADORE <

SYHB (

•DO C

AUX3A8I

AUXVAL' .

Ot"0773110000CO- 0.10640C51E-19

0»-077301077301-

0)-005400000000-

01-002200000000

01-014571000000-

01-202400000000

ST01A3I O-2C24CCOCCOCG- C.2CCCOOCOE 01C77«OC473332 C7727500COOO 077271000000

C77400473332 077275COOOOO 077271000000 AOOPEOI400001-077273077273-

AOO ( OI-C11273CCOOOO- C.09899697E-190774CC473332 C77265CCOCGC 077265000000

ADORE ( OI-C77267071267- C.OS6944ÎCE-19

SYHB ( 0)-OC2CCOOOCCCO- C. OOOOOOOOE-38C77400473322 C17261CCOOCC 077257000000

ADO I C)-CTi263CCCCCC« 0.0941618CE-19C7740C473332 C77255COOOOO 077253000000

SYM6 ( 01-002346000000-

«00 I 01-077267000000

ADORE • OI-077263C772O-

SYKE I OJ-005400000000-

0.1Q223CC8E-19

0.47C19774E-37

0.293C73Ï9E-38

0.86632274E-35

0.20CCOCCCE Cl

0.09906249E-19

0.528C5410E-38

O.C9667939E-1S

O.OÎ4Ï273ÎE-1Ç

0.47C1S174E-37

ADORE ( CI-CC23CCG14Ï66- 0.44C66747E-38

SYHB I OI-05COOCOOCCCC- O.OOOOOOOOE-26

VA8 >T 0)-2C2C2C7in4> C.3141590CE 01

AOO ( OI-0023000000CO

AUX3A8C 01-014566000000

A U X V A L I 01-202622077174

ST01A3I GI-2C2622C77174- 0.3141Î900E 010774CC473332 C 7 7 2 Ï 5 C C C C C C 077253COCOOO

C77400473332 07725500COOO 077253000000 »OOPEO(62200)-007000014534-

ADO ( OI-CG7CCCOOCGCC- O.OOOOOOOOE-36

AUX3A8J Q!-0!4Ï34CCCCCC» O.S18144C7E-35

âUXVALC OI-177S25252525- 0.33333333E-00077400473332 C772SSGOCOCO C77253GOOOOO

VA3 ( 0)-2014140!2122- C.1C471966E 01

SYHB (

VAS !

STC2*3<202622077174

«UXV/LI

01-001400000000-

OÎ=Ï77525252S25»

0)-177525252525-

C.44C81C38E-38

0.87926917E-35

C.3141ÏÇCCE Cl

0.00001819E-36

0.29381359E-3B

0.33333333E-CC

0.33333333E-OC

0)-201414052122- 0.10471966E 01

ST01AK OI-2C1414052122* 0.1C471966E 01C7740C473232 C77261CCOOOO C77257COOOOO

077400473332 077261000000 077257000000 AOOPEO(414001-002400014563-

ADO I OI-CC24CGOCGOCC- 0.58774718E-38l

AUX368t 0)-014Ï63CCCCCC- 0.67221681E-35

4UXVAK 01-201414052122- 0.10471966E 01077400473332 C77261COOOOO 077257000000

VAl OI-2C2414052122- 0.20943933E 01

ST01A61 OI-2C2414052122- C.2C943933E 01C77400473332 077265CCOOOC 077265000000

SYHB (

V A S I

STC2AK201414052122

*UXV«L(

VA6 (

0)-062100000000"

0)-201414052122«

01-201414052122-

0.58780424E-38

0.04135ÇC3E-23

0.10471966E 01

0.1C471966E 01

«UXVAU 01-517777777133 — C.49999843E-00 STC2A3I077400473332 C77275000000 077271000000 202400000000

VA3 I OI-6CC777777133 —C.S9999686E 00 *UXV«U

0)-202414052122- 0.20943933E Cl

OM577777777133— 0.49^9e43E-CC

01-577777777133— 0.49999843E-CC

01-600777777133— 0.99999teÉE CO

ST01AK OJ-6CC777777133—C.99999686E 00C77400473332 C77277COOCOC C77303000000

177400413332 0772770COOOO 077303000000 AOOPEfl(777701-002500014561

«DO ( O-CC2ÎOCOCCOCO- 0.734âC397E-38 SYHB (

AUX3A8( OI-C14Î610CCOOC- 0.66751483E-35 V«B (

AUXVALI OI-2C3ÎOOOOOOCC- C.4SSSS999E 01 STC2A1I077400473332 C77277COOOOO 077303000000 60077777713;!

01-000067000000-

01-203500000000-

01-203500000000-

0.73474ÎCIS=38

0.03156845E-38

0.499SS999E Cl

0.49999SS9E 01

VJ1 ( CI-2G34CCOOOG64- 0.4C00003UE 01

ST02«1( O-2C34CCOCCC64- 0.4COC003CE 01077400463374 C773C7COOOOC 0773C5CCOOOO

*UXV*l(

20260V«1000(

01-203400000064

01-203700000064

0.40000C30E Cl

0.1CCOCC3CE Cl

VALEUR DE LA FONCTION

Z - 7.00CC Fig. V. 9

Page 56: SLIP: Langage de listes symétrique Applications

- 61 -

II -6 - DERIVATION FORMELLE

Les calculateurs digitaux ne travaillent en général que sur

des nombres, aussi, si l'on veut calculer la dérivée d'une fonction

au voisinage d'un point, on calcule la valeur de cette fonction

au voisinage du point en question et on évalue le rapport des accrois-

sements de la fonction à ceux de la variable :r* f (X 4- A X) - f (X)y _ -_ -

û x

calcul s'effectuant sur des nombres, donc accessible au traitement

automatique, et donnant un résultat y1 numérique.

Le calcul de la valeur d'une fonction tel que nous l'avons

développé au chapitre précédent, laisse entrevoir la possibilité d'un

traitement quelque peu similaire, au point de vue de la reconnaissance

des symboles, permettant de calculer, grâce aux listes, la dérivée

formelle d'une fonction. En effet, dériver une fonction est une

opération complexe, difficile sinon impossible sans le concours des

soit y = W(x) + U(x) x V(x) + T(x)

la dérivée sera y'= W + (U'V + V'U) + T'

formule bien plus longue que celle de y. Ajouter des lettres, des

symboles dans une fonction linéaire, représente un travail très com-

pliqué, Mais si l'on travaille sur des listes, il n'est Jamais diffi-

cile d'accrocher une sous-liste en un point quelconque d'une liste.

Il suffit d'être à même de calculer la dérivée de chaque groupe de

symboles, et d'intercaler cette dérivée dans l'ensemble. Nous avons

pour cela choisi la notation polonaise préfixée, définie au chapitre

précédent, ce qui nous permettra aussi de calculer la valeur de la

fonction dérivée.

Le programme mis au point n'est qu'un exemple, mais son

fonctionnement satisfaisant montre qu'il est possible de le géné-

raliser et de dériver des formules plus compliquées. Nous n'avons

traité que les fonctions Addition - Soustraction - Produit - Division -

Puissance - Sinus - Cosinus relatives à des constantes, à la variable x

ou à des fonctions de x. Tout le raisonnement est relatif au cas le

plus général : les fonctions de x

Page 57: SLIP: Langage de listes symétrique Applications

62

(U +

(U - V)1

(U.V)!

(uA)1

(Sn U)

(Co U)

U' + V'

u! - VU'V -f V'Uu'v - v'u

U'.Co U

- U' Sn U

(+, U, V)

(-, U, V)

(*, U, V)

(A u, v)(Sn,U)

(Co,U)

(+. u1, V)(-, U', V)(+(,*, U1, V) (*, U, V1))

(/(-(*,Uf, V)(*,U,V'))(**,V,DEUX)

(*,U'(Co U))

(*, MUN(*, U' (Sn (U))))

La procédure sera une procédure recursive. Pour calculer la

dérivée de UxV on fera «dérivée (U * V) = dérivée (U) * V+ U * dérivée(V)

dérivée(u) = = D1 - dérivée(v) = = D2

etdérivée (U * V) = Dl * V + U * D2

On s'arrêtera lorsque l'on arrivera à "dérivée d'une constante"

ou dérivée (X) en fournissant dérivée (C ) = 0 , dérivée (X) = 1.

Ce procédé est assez lourd, mais la possibilité du travail

récursif fait que le programmeur n'a plus à s'en soucier. Cependant,

de par le mode même de traitement, on ne s'arrête qu'en fournissant

ZERO ou UN, ce qui fait que subsisteront de nombreuses cellules inutilesl

(A.X) = (x, A, X) —*• (+ (*, ZERO, X) (*, A, UN)) ce qui une fois

simplifié pourrait s'écrire (A). On peut concevoir un programme acces-

soire de nettoyage, travaillant à la suite du programme de dérivation,

aboutissant à éliminer toutes les cellules superflues. Cependant, ces

cellules ne nuisent pas à l'exactitude du résultat et ne constituent pas

un obstacle à l'évaluation de la VALEUR de la formule dérivée pour une

valeur déterminée des constantes et de la variable X.

Le sous-programme de dérivation s'appelle DERIVE. Il appelle

le sous-programme DERI qui sert uniquement d'intermédiaire à l'appel

récursif. Ce procédé de traitement est tout à fait analogue à celui de

VALEUR .. Ponction DERIVE fig. VI.2 Programme de calcul et fonction DERI

fig. VT.1 Calculs fig. VI.3 à fig. VI.\\ .

Le procédé de calcul est voisin de celui de VALEUR. La structure

de la liste est la même. Pour dériver U.V.W qui s'écrit en notation

polonaise (*,U(*V,¥) on calculera dérivée (ïï) puis dérivée (V W)

dérivée (v.W) nécessite dfabord dérivée (v) et dérivée (w) ces deux

dernières obtenues, on bâtira la structure

(+(*(dérivée (U))V) (*,V (dérivée (w)))

dont le nom de liste sera la valeur de la fonction DERIVE et ainsi de

suite.

Le mécanisme de récursivité est le même que celui de Valeur. Mise

en réserve et récupération :

du symbole opération SYMB

des adresses des sous listes ou paramètres IS1 IS2

symboles ou paramètres SIMB 1 SÏMB 2

adresse de retour MG (?66)

valeur intermédiaire STO 1

Quand on remonte les adresses de retour* on bâtit la structure

grâce aux structures partielles déjà bâties. Quand les piles sont vides,

on revient au programme principal.

Page 58: SLIP: Langage de listes symétrique Applications

CALCUL DE LA DERIVEE D'UNE FONCTION

PROGRAMME PRINCIPAL

CCADERIVEE D'UNE FONCTIONDIMENSION X ( 1 0 0 ) « L A V S ( 2 ) » L E T T R E C 3 6 ) » M O T ( 2 1 6 ) « T A B L E ( 1 0 0 )COMMUN C R E F » X , L A V SAPPEL INITEDLIRE ILLETTREIMPRIMER ILLETTREAPPEL S E P A R E ( L E T T R E * M O T )APPEL F L S T P ( M O T , L A )APPEL I M P L S T ( L A » L 5 L , L , L )L = L I S T E ( 9 )APPEL INSIND(-1,LA,LA»L-1)D = D E R I V E ( L )IMPRIMER 13»DAPPEL I M P L S T ( D » L » L , L » L )APPEL L I S S Y M ( D » T A B L E )IMPRIMER 20 ,TABLE

1 MODELE(5X ,11A6)13 M O D E L E ( 5 X » 5 H D E R I = » 0 1 2 » / / Ï20 MODELEt1HO,12A6)

APPEL E X I TFIN

FONCTION DERI

*DERI

DERI

AA

MGB

AUX

COMPTENTREESXARADSORRADSRATEDTSXTSXTSXTSXSORTEDTSXTSXRADEEXTRABCSFIN

20DERIMGB, 4$(IMP)21,4AA=HAADERI$PARMT8*4MGBSDERIVE,4#iV

AUX=HAUXDER$RESTR8»4MGBAUX**,4.2 *41

Fig. VI. 1

Page 59: SLIP: Langage de listes symétrique Applications

os

FONCTION DERIVE(L) 'DIMENSION MG(2)PLUS=2H++ 10FOINS=1H-PROD=1H*DIV=1H/SINU=2HSNCOSI=2HCO 11PUIS=2H«*XX=1HXUN=2HUNDEUX=3HDEU2ERO=3HZERUNM=3HUNMAPPEL INTROD(PLUS.LUS)APPEL INTROD(FOINS,MOINS)APPEL INTRDD(PROD.MROD)APPEL INTRDD(DIV.NW)APPEL INTRDD(SINU.INU)APPEL INTRDD(COSI»LOSI)APPEL INTRDD(PUIStMUIS) 12IDD=LSG(CONT(L-1))VAR=CONT(L-1)SYMB=CONT(LSD(CONT(IDD))-l)APPEL INTRDOtSYMB,LYMB)IMPRIMER 30.SYMBIS1=LSD<CONT(LSD(CONT(IDD))))IS2*LSD(CONT(IS1»SYMB1=CONT(IS1-1)SYMB2=CONT(IS2-1)SI<LYMB-LUS)100f101»100

100 SI(LYMB-MOINS)102.101,102102 SI <LYMB-NIV)103»101»10?x103 SI(LYMB-MROD)104,101*104104 SI(LYMB-INU)105,101*105105 SI (LYMB-LOSD106,101*106106 SI(LYMB-MUIS)7,101,7101 APPEL PARMT6(MG(766)>IS1.IS2,SYMB1»SYMB2»SYMB)

ST01=DERI(IS1)IMPRIMER 31»ST01APPEL RESTR6(MG(766),IS1,IS2,SYMB1.SYMB2 »SYMB)APPEL PARMT7(MG(766),IS1,IS2.SYMB1»SYMB2,SYMB»ST01) 13ST02=DERI(IS2)IMPRIMER 32»ST02APPEL RESTR7(MG(766)*IS1,IS2,SYMB1»SYMB2»LYMB»ST01)SI(LYMB-LUS»1»8,1

1 SI(LYMB-MOINS)2.10»22 SI(LYMB-NIV)39l2»33 SI<LYMB-MR04)4,11.44 SI(LYMB-INU>5»13»5 145 SI<LYMB-LOSI)6,14»66 SI<LYMB-MUIS)7,15»78 LA=LISTE(9)

APPEL NVQU(PLUS»LA)APPEL NVQU(STOl.LA)

APPEL NVQU(ST02»LA)ALLER A 17LA=LISTE(9)APPEL NVQU(FOINS.LA)APPEL NVQU(ST01»LA)APPEL NVQU(ST02»LA)ALLER A 17L2=LISTE(9)L1=LISTE(9)LA=LISTE(9)APPEL NVOU(PROD»L1)

NVQU(ST01»L1)NVQU<SYMB2»L1)NVQU(PROD»L2)NVOU(SYMB1»L2)NVQU(ST02»L2)NVQU(PLUS»LA)NVQU(L1,LA)NVQU(L2,LA)A 17

NVQU{PROD,L1)NVGUCL2.L1)NVQU(ST01,L1)NVOU(SINU»L2)NVQU(SYMB1»L2)A 17

APPELAPPELAPPELAPPELAPPELAPPELAPPELAPPELALLERLA=LISTE(9JL1=LISTE(9)L2=LISTE(9)L3=LISTE(9)L4=LISTE(9)APPEL NVQU(PUIS,L2)APPEL NVQU(FOINS»L1)APPEL NVQU(L3,L1)APPEL NVQU(L4,L1>APPEL NVQU(DIV.LA)APPEL NVQIMPROD.L3)APPEL NVQU(PRODtL4JAPPEL NVQU(SYMB1»L4)APPEL NVQU(ST02,L4)APPEL NVQU(STO1»L3)APPEL NVQU(SYMB2,L3)APPEL NVQU{SYMB2.L2)APPEL NVQU(DEUX»L2)APPEL NVQIMU.LA)APPEL NVQU(L2»LA)ALLER A 17LA=LISTE(9)L2=LISTE(9)APPEL NVQIHCOSI »L2)APPEL NVQU(SYMB1»L2)APPEL NVQU(PROD.LA)APPEL NVQU(ST01»LA)APPEL NVQU(L2,LA>ALLER A 17LA=LISTE(9)L1=LISTE(9)L2=LISTE(9)APPEL NVQU(PROD.LA)APPEL NVQU(UNM-LA)APPEL NVQU(H,LA)

APPELAPPELAPPELAPPELAPPELALLER

15 LA=LISTE(9)L1=LISTE(9)L2=LISTE(9)L3=LISTE(9)APPEL NVQU(PROD.LA)APPEL NVQIMSYMB2.LA)APPEL NVQU<L1,LA)APPEL NVQU(PROD.Ll)APPEL NVQU(L2.L1>APPEL NVQU(STOl.Ll)APPEL NVOU(PUIS.L2)APPEL NVQU(SYMB1»LZ)APPEL NVQU(L3,L2)APPEL NVQU(FOINS»L3)APPEL NVQU(SYMB2»L3)APPEL NVQU(UN,L3)ALLER A 17

7 SI<VAR-XX)20,21,2021 DER=UN

APPEL INTRDD(DER»LA)ALLER A 17

20 DER=ZEROAPPEL INTRDD(DER»LA)

17 APPEL INTRDDILA,DERIVE)IMPRIMER 33.LARETOUR

30 MODELE(5X»A6,5H=SYMB.//)31 MODELE(5X,5HST01=,012»//)32 MODELE(5X,5HST02=.012.//)33 MODELE(5H LA=,012,//)

FIN

to

Page 60: SLIP: Langage de listes symétrique Applications

s:

r?"

Sia

mmSsfiip!

Page 61: SLIP: Langage de listes symétrique Applications

DERIVEE D»UKE FOlSCTION

Fonction dérivée sous foiae de liste

.= C ? 7 2 2 7 C 7 7 2 2 7 LÛ=C77227077227 L t=077227077227

i'tti 1 7 C ' i < 2 2 3 C U C C C t U C C C

1 'It i < '• C 7 ( < 1 7 C 7 < 1 7 7 L 7 1 « 7 7

; ; t ï i £C- |é£ t l C C C C C C C C C C L 2

l U 5 7 7 C 7 t b 5 7 2 C 2 C t C 6 C b C 6 0

ntït i i ï t î i t ciefacuifctu

276571C76575 OCC000000001

C766C1C76573 ÏA606C6C6060 *

C76575076571 7125516C6060 ZER

176573C76601 C773C1C77301

277271C7727£ C C I C C C C C C C C *

0773C1077273 5 4 Ï 4 6 C 6 C 6 C 6 C **

0 7 7 2 7 5 C 7 7 2 7 1 6 7 4 C 6 C 6 C 6 C 6 C x

077273C773C1 2<25i<

C 7 6 6 C 3 C 7 6 É C 3

276563C76567 OOOOCC000001

C766C3C76565 5^606C6C6060 *

C76567C76563 21606C606060 A

176565C76603 C76dA3076643

276627076633 C C C C C C C C C C C 1

076t^307t t31 £ ' (ÉC6CtC6C6C »

C 7 6 6 3 3 C 7 6 6 2 7 2 1 2 Î 6 A 6 7 6 C 6 C DEUX

176É31076643

C C C C C C C C C C C 1

2 C 2 C 6 C e C 6 C 6 C

276243C76247 OûCCCCOOÛOOl

C762Ï3076245 516C6C6C6060 *

C76247076243 712551606060 ^ER

1762^5076253 077257077257

2 7 7 2 4 7 C 7 7 2 5 3 C C C C C C C O C O O A

177253077257 C 7 7 2 5 1 C 7 7 2 5 1 .

276235076241 000000000001

C7É255C76237 54606C6C6060 *

C762A1076235 226C6C606060 B

176237076255 0763C3076303

27627107627Î C C C C C C C C C C C 1

0763C3C76273 E « e C 6 C é C 6 C 6 C *

076275076271 « 4 4 5 4 4 6 C 6 C 6 C uj

176J73C763Û3 C763C1C76301 ..

Pig VI 6

VADEVA C A L C U L DE LA VALEUR D'UNE FONCTION,DE SA DERIVE!:' ET DE LA V A L E U R

10

20

17

211

1315100101

DIMENSION X( 100), LA V S ( 2 ) , LETTRE (36) ,MOT (216) ,T ABLE(200 ) ,T AB< 200 )COMMUN CREF,X,LAV$APPEL INITEDIMPRIMER 2LIRE 1,LE11REIMPRIMER 1, LETTREAPPEL 5EPARE(LE11RE,^G1)APPEL FLSTP(MCT,LA)APPEL I*PLSTUA,L,L,l,l)L=LIS1E(«)APPEL INSIND(-1,LA,LA,L-1)APPEL TABSYMLA, TABLE)FAIRE 1C I*2tlC,2LIRE 11,1ABLE(I)IMPRIMER 1A, TABLEV = V A L E L R ( L , T A B L E )IMPRIMER 13, VC*DERIVE(L)IMPRIMER 15, CAPPEL IMPL5T(D tL ,L ,L ,L )L V = L I 5 T E ( S )APPEL INSINO(- l fD,D,LV- l )APPEL T A B S \ M ( D t 7 A B )FA IRE 2C 1 = 2, 2C, 2LIRE 1 1 , 7 A R ( I )IMPRIMER 14, T A BV = V A L E L R ( L V , T A B )IMPRIMER 13, VLIRE 1CC,BLF A I R E 17 Î = 1 , 2 C CT A e ( I ) = B LAPPEL L I S S Y M C C , TABLE)IMPRIMER ICI, TABLEAPPEL E X I TM O C E L E ( 5 X , 1 1 A 6 )M O C E L E ( 1 H , 5 X , J 6 H F C N C T Î C N A DERIVER,/ / / )MCOELE(F lC. l )M O O E L E ( 5 ( 5 X , C 1 2 ) )MODELE(1H,5X,21HVALELR DtË LA F C ^ C T I C ^ ,5 X ,F10 .6 ,/// 1M.ODELE(1HÎ,5X,«HOERI\EE= ,C12)M,OOELE(012)M O D E L E ( Î H 1 , 5 X , 1 6 A 6 , / / )F1N( 1,1,C, C , C , C , l t C , C , l , C , C , . C , 0 , C )

Fig. VI. 7

Page 62: SLIP: Langage de listes symétrique Applications

CALCUL DE LA VALEUR DE LA FONCTION AVANT DERIVATION

UUL1S FK. lhSI lS tt LA V É L f c l P C E LA FCNCUCN A V A N T DERUAUCN

0 < i C 6 C t C t t £ C 6 C £ 1 £ C 6 U C 6 C 6 C i 4 6 C 6 C t C 6 C 6 C 624560606C60 2346606C6060 5<t546C606060L 7 3 7 C 1 C C O C C C ( 7 7 3 C 7 I C L C C C C 7 7 2 6 5 C C C L C C 202C6C606C6C

= 2C2C6C6C6C60

A A V A L { C )=OC74GCOC7547= 3840, 3943

F A H M 4 C 6 b 7 t * C C C C C C

bM\i<F/HM t ( 7 7 « C C 4 7 C £ î I

irv= tco i6toi,otij

t2456C6C6C60 23^.660606060 54546C606060 S Y M B = 5 < i 6 C 6 C £ C 6 C £ Cl 7 7 3 t 3 C C O C C C C77277GCOOOC 5460606C6C6C

A A V A L ( CJ=CC7400007547= 3810, 3943

£ 1 £ ( £ C £ U C 6 C= 3 .CC

6 2 4 5 6 C 6 C 6 C 6 C 23466C6C6C60 S4546C606060 S Y H E = C C C C C C C C C C C C

A *3.

C ) =

2(26CtCCCCCC

it C t ! i 7 t 4 C C O ( CC

i O t 5 7 £ * C C O C C C

t 0 ) = C

= C . 3 C C C C C C C E C l

3.

C77^77CCCCCO 546C6C6C6C6C

C 7 7 2 7 7 C C C C C C 5^t6C6C6C6060 2C260000COOOfc M VA (.(28336) =063051256225=

ii 'C,

2 C 2 C t U C 6 U O ' , C 6 C é C 6 C t C 6 C t U C 6 C f C t 0 6 C Ï46C6C6C6060 62456Û606C60 23466C606060 5454606C6060 SYHB=54546C6060tG(, O t 5 7 t ' C C C C C C C 7 7 i 7 3 ( C C C C C C 7 7 2 7 1 C C C G C C 54546C606060

tNTVA I(29C341=C£C100C21307=

2 C 2 C t t K 6 C é c " c 6 C é C É C i C 6 C £ 1 £ ( £ C < C ( C 6 C Ï 4ÉC6C6C6C6Û 62156C6C6C6C 23466C60£C60 545460606060 SYH6=OU6COCCOOCC1

J- K" X . H / 2

AtXVAH OJ=roi622076454= 0.157C7900E 01

07«£< X=PI/2

0 6 5 7 6 ' t C C O C C C C 7 7 i ' i 3 C C C C C C

c £ £ " i £ A C c c c c c mnsccccu

f M \ / l t ? F ? £. d 1= f ï : C i J J ' < Î i î =

C77271CCCCCO 545460606C60

C 7 7 2 7 1 C C C O C O 54546C6C6C60 201622076454

A A V A l ( C)=CC74C0007546= 3340, 3942

2 0 2 0 < C É C 6 C 6 C L ^ C 6 L é C t C t C 6 C t l £ ( £ C £ t < C 6 C î 4 6 C 6 C t C 6 0 6 0 62456C606C60 234660606060 545460606060 S Y M B = C C 6 C O C C O C C C 1

3= 2 * C C DEUX = 2.

C J ^ i C i l C C C C C C C C ^ C . i C C C C C C C E C l

C 7 7 2 7 2 C C C C C C C77271CCOOCO 54546C6C6C60 201622076454

J1 C J = 1.51CtSUi= 2 . C C C C C

X= 2.467 AUXVAH 0)=2C2473646225= 0.24673811E 01

t 0 6 5 7 6 1 C C O O C C C 7 7 2 C 3 t C C C C C C7727700QCCC 546060606060 202600000000

V / = ; C 3 7 3 1 t 7 1 3 3 7

VI 8

/ L > V / L I 0)=iC3-|2F . E S 1 F E C 7 7 4 C 0 4 7 C Ï Î 2

(373 157 1337

l337= C .1«Ci l433E Cl

=7.402

FES7F1 - C 7 2 7 C 2 C C O O C C C 7 7 3 Î 7 U C C C C C77265CCCCCO 2C2C6C6C6C60

F A R M S 0 7 3 7 C i C C C O C C C 7 7 2 1 7 ( C C C C C C 7 7 2 6 5 C C C C C O 2C2C6C6C6C60 203731571337ENTVAl(289981=063051256225=

3S42« C J = C C 7 4 C C C C 7 Î A £ = 2F A F M 8 C 7 7 4 C 0 4 7 C 5 G 6

LN= C C £ 7 1 6 C O C O C O20206C606C6Û 4 0 6 C 6 C 6 C 6 C 6 C £ 1 6 C £ C £ C £ C 6 C Ï46C6C6C6060 62456C606C60 234660606060 545460606060 S Y M E = 5 1 6 C 6 C £ C £ C £ C *

0 6 5 7 É 4 C C O C C C C 7 7 i £ K C O O C C C77255CCCOOÛ 546C6C606060EMVAH29C34) = 060 100021307=

I 0 ) = C C 7 « C O C C 7 Ï 4 7 =

LN= C C 6 7 1 6 C C C G C C2 C 2 0 e C £ C 6 C 6 0 1 C é C £ C £ C 6 C t C £ l £ ( £ C £ C t C 6 C S46C6C6C6060 C2456C6C6C60 234660606060 545'.60606060 S Y H B = O C C C O C C C C C 14

LE=E N = 2 2 < C t C « C £ C £ C V A L O = 1.50B «= I..)

V A = 2 C 1 6 C C C O C O C OA U > V A L ( C1=2C1600CCCOOO= C .150COCCOE Cl

S T C l = i ( J 6 C C O C C C O G

J E S 7 F 4 0 6 5 7 6 4 C C O C C C C 7 7 i < l C C C C C C C772550000CO 546C6C6C6C60

C 7 7 2 1 H C C C C C C 7 7 2 5 5 C C C O C C 546C60606060 2C160000COOO

A A V A L J C)=0074000C7546= 38^0, 3942

IA= CC6716CCCOCO2C2CtC£C6C6U 4C6CtCeC£C6C <16C6C£CéC6C 546C6C6C6060 62456C6C6C60 23^660606060 545460606060 SYMB=23466C6C6CéCFARMA Û65764CCOOCC C77247CCCGCO (77257CCCCCC 23466C606C60 Cos

E N T V X L (29C24 ) = C'6C ICûCi 13C7 =F A R M 6 ( 7 7 4 C Û 4 7 C 5 £ 2

A A V A L ( 0 )=OC7400007547= 3810, 3943

LN= C C 6 7 1 6 C O C O C C2 C 2 0 « C e C 6 C £ 0 1 C 6 C £ C £ C t C t C * l £ C £ C t C é C 6 C Î16C6C6C6060 62456C6C6C60 2346606C6C60 5454606C6060 S Y H B = 2 C 2 C 6 C 6 C 6 0 6 CFARM4 0 6 5 7 6 4 C O O C O C C 7 7 2 1 K C C C C C C772310CCCCG 202060606060

E N T V / L 1 2 9 C 3 4 ) = C £ C l C O C i l 3 C 7 = A A V A L ( 01=007400007547= 3840, 3943

IN= C C 6 7 1 6 C C C O C O2 0 2 0 £ C £ C £ C £ 0 1 C 6 C £ C É C é C É C £ l £ C £ C t C ( 0 6 C Ï4£CCC6C6060 62456C6C6C60 23466C606C60 54Î46C606060 S Y H E = 5 1 6 C 6 C é C 6 C £ CFARHT4 065764CCOCCC C 7 7 2 3 Ï C C O C C C C772330000ÛG 546060606060

E M V / L I29C31 J = C £ C 1 C C C 2 13C7= A A V A L I 0) = OC7400007547= 3840, 3943

LN= C C 6 7 H C G C G C O2C2Cét iC6CéC A C e C é C t C « C 6 C £ l é ( 6 C < C £ C 6 C î<p6CÉC6C6060 62456C6C6C60 234660606060 545460606060 SYHB = C C 6 C C C C C C C C 1

LE = C N = i 3 £ C £ 0 £ C £ C 6 C V < L O = C.5C 0 = 0.5

V A = 2 C £ 4 C C C O C O C O

C 1=2CCUCCCCCGC= C . 5 C ( C C C C C E CC

S T C 1 = 2 C C 4 C C O C C C O O

RESTR4 0 6 5 7 6 4 C C O C C C C 7 7 2 2 î C C C t C C C77233000000 546060606060

FARMS 0 6 5 7 É 4 C C O O C C C 7 7 2 2 Î C C C C C C G77233CCOCCC 546C6C6C6C60 200400000000ENTVAL(28998)=063051256225=

A A V A L I 0 ) = C C 7 4 C C C C 7 S « 6 = 384C, 3542F A R M 6 C 7 7 4 C 0 4 7 C 5 0 6

LN= C C 6 7 1 6 C O C O C O2 0 2 C £ C É C 6 C 6 C 4 0 6 C £ C 6 C £ C 6 C £ l £ C 6 C t ( £ G 6 C Ï4£C6C6C6060 62456C6C6C60 234660606060 545*60606060 SYHB=OC6CCCOOOOC1

LE = X I > = 6 7 £ C 6 C 6 C £ C 6 C V A L O = 1.57 X = PI/2

V A = 2 C l £ 2 2 C 7 £ 4 ï 4

».UXVAL( 0)=2C1622076454= 0.157C7900E 01F E S T F £ C 7 7 4 C 0 4 7 C 5 0 é

FES1R5 065764CCOOGC C 7 7 2 3 Ï C C C C C C C77233GOOOOC 546060606060 20C400000000

VI 9

Page 63: SLIP: Langage de listes symétrique Applications

f f c i lK O É 5 7 < * l t O C C C

C J =

; î< * C . 7 1 Î 2 S S C C E C C

C X = PI /4

l l i i ' lUCCCC

( 7 7 ; < K C C C C C

l~ 2 £ < C , 2542

C 7 7 2 3 1 C C C C C C 2C2C6C6C6C60

C 7 7 i 3 1 C C O C C C 2 C 2 C 6 C 6 C 6 C 6 0 20C622076454ENTVA 1(28998)=063051256225 =

U= CCt716COCOCO2C^Lf L6C6C6U

174

6^!456C6C6C60 2346606C6060 545460606060 SYf,E=CC6COCCCOOC l

PI

A L X V A l t 01=202622077174= 0.31415900E 01

C 2 6 2 Z C 7 7 1 7 4

06 i ' ie4( .CCt t ( C 7 7 2 M C C C C C C C 7 7 2 3 1 C O O C C C 2C2C6C606C60 200622076454

;;i«i 1 6 7 ( 7

l U ) = 2 L 2 7 < 6 î 1 < 7 ( 7 = C . 3 * i t « . £ 5 C E C l( 7 7 4 L 0 4 7 C S Ï 2

< 5 ) t 7 t 7 C X + D = 5.PI / 4

C Ê 5 7 f c 4 C C C C C C IV iZ^ lUCCCC C 7 7 5 7 C C C C C C

C 6 5 H 4 C C C C C C C 1 7 î ^ 7 ( C C C C C C 7 7 2 5 7 C C C C C C 234660606060 202766516707ENTVAL (289981=063051256225=

A A V * L I 0 ) = ( C 7 « C C C C 7 Î 4 6 = 2 6 4 C , 3942F A I . H E C 7 7 « ( C 4 7 C 5 C 6

ltv = C C 6 7 1 6 C C C O C C2 C 2 Û 6 C 6 C 6 C 6 0 4 C 6 C É C 6 C £ C 6 C 6 1 6 C 6 C 6 C 6 0 6 C 546C6C6Cô060 62456C6C6C60 23466C606C60 545460606060 SYMB=5COCOC012C27

e i f r c c c c c c c c c i v = c ceL =00000 N = L L Alr 'ALû

/i = C C 7 4 C C 4 0 2 7 7 4

S l F 6 ( 7 7 4 C 0 4 7 C 5 0 6

S 1 C 2 = C C 7 4 C C 4 C 2 7 7 4

F E S T I - î C 6 5 U 4 C C C C C C

A L X V A L I C)=OC74C0402774= 0.18345073E-36

C 7 7 2 5 7 0 C C O C O 234660606060 2027665167C7

• 1 . 7 C 7 1 1 C S 3 E C C

C" i ï< H C C C C C C 7 7 2 5 5 C C O O O O 546C6C6C6C60 201600000000

A U X V A L C C)=601417417524=-0.10606664E 01

Coa ( C X + D ) =>— 0.707

• t C 7 2 7 C K C C C C C C" i7217 ( C C C C C C77265CCOOCO 2C206C606C60 203731571337

c C . t < 5 6 6 . < c B . Cos ( C X + D )=-1.06

V / l t L F C t L A F C f ^ C ï l C N t .341477

P t S T ( - e C 7 7 4 C 0 4 7 C 5 C 6

S T C 2 = 6 C C i 5 i ( 2 4 7 C 6

S 0 6 5 7 6 4 C C C C C C

A X2 + B. COB (C X + D ) - 6.34

Avec AM 3. B-I.5 C = 0.5 D . PI et X = H/2

VI 10

CALCUL DE LA VALEUR DE LA PONCTION DERIVEE

CAULIS II Lfi t t J.A H.NUIIN APKci U b K l V A l U N

IN= C C 6 7 1 6 C C C C C C

2 0 2 0 6 C 6 C C C 6 0 4 C 6 C 6 C 6 C 6 C 6 C 6 1 6 C t C ( ( 6 C 6 C ï 4 6 C t C 6 C 6 C 6 C t24 i tC6C6C60 23466C6Q6G6C S4546C60606U S Y M S = 2 C 2 C 6 C 6 C 6 C 6 CF A R N T 4 C 7 3 6 1 6 C C C C C C ( 7 6 i i l C C C C C C t 7 6 2 i Y O C C C O C 2C2C606C6C60

E M V / L ( 2 S C 3 4 ) = C 6 ( ' l C C C i 1 3 C 7 = A A V A L ( C J=CC7400007547= 3840, 2943Lt t i

IM C C 6 7 1 6 C C C C C C

2 C 2 C 6 C 6 C 6 C 6 C 4 C 6 C 6 C 6 C 6 C 6 C < H ( 6 C < U C 6 C i4 tC6C6C6060 624i)6CfeC6C60 23466C6C6C60 54i460606060 SYME = 2 C 2 C 6 C 6 C 6 C 6 CFAPH4 0 6 i 7 6 4 L C O C C C C'it S Î 7 C C C C C C C 7 6 f > b t > L C C t L C 2C2C60606060

2 C 7 = A A V A L I • 0 ) = C 0 7 4 0 0 0 0 7 5 4 7 = 3840, 2S43

lh= C C 6 7 1 6 C C C C C O2 0 2 C 6 C 6 C 6 C 6 0 4 C 6 C 6 C 6 C 6 C 6 C 6 1 é ( 6 C < ( 6 C 6 C 5 4 6 C 6 C 6 C 6 0 6 C 6 2 4 5 6 C 6 C 6 C 6 C 2 3 4 6 6 C 6 C 6 C 6 0 Ï 4 5 4 6 C 6 C 6 0 6 0 S Y M 6 = 5 4 6 C 6 ( 6 C 6 C 6 CFARM4 Û 6 5 7 6 4 C C O O O C C ït i 1 2 C C C C C C 0 7bt ;71(JCCCC C 546060606C60

A A V A L ( C)=OC7400007547= 3840, 2943

LIS* CC6716CCOCCC202C6C6C6C6C 4Ctt6CtCtC6C 616C6Ct(6C6C £46C6(6Cù06C 624b6C6C6C6C 234660606C6C 5454606C606Q

LE = 2 t f i ^=^liïïl6C6C6CVALO= C.

V/!=CCCCCCCÛOCCO

V/=2CC417<16GÎ4

= CC6CCCCOCCC 1

0) = 2CC4]7< 16C24= ( .S 2 ( -itSSfc CCFESlF€C774CC47CtC6

PESI f .5 0 6 5 7 6 4 C C C C C C C U i î K C C L C C C 7 6 2 2 7 U C C C C 2 C 2 C 6 C 6 C 6 C 6 C 4 C C C C C C C O O O O

^ . S L b C 6 7

A U X V A L C C)=2C0417416024= C.53032699E 00

; ; i C C C ( . C C (76^17UtOC,CC 2C2C6C606060 2 0 4 4 E 5 4 b 6 7 4 0C73tlfC(CCtC

V / L t U I - U L/ K.hCT 1LN

Avec UN = I. ZER = 0 A = 3. B

et X t= PI / 2

C => 0.5 D = PI

Pig VI t1

Page 64: SLIP: Langage de listes symétrique Applications

FORMATION TE LA TABLE DES SYMBOLES

ZER 7 1 2 5 5 1 6 C 6 C 6 C-1 6C140CCCCGCO

DEIK 2425646jeC.eC0.5 2CC4CCCGCUCO

C C C C C O O O O O C CcccccccococccccccccoccccC C C Û C C C O C O C OcccococooccccccocccococccccccccocccccccccccoccccccccccccccccccccoccocococccccccococcccccccccccccoccococccoccC C C O C C C G C C C CC C C C C C C C C C C ûcccooccccocccccccccccocccccocococcccC C C O L C C C C C C Ccccocococccccccooccocccccctccccccococccccococococccccoccccccrrccccfccccc

o.ccccccccccccA 2 1 6 C 6 C 6 C 6 C 6 C2 ; 2 C 2 4 C C C C C C C CD 2 4 6 C 6 C É C 6 C 6 C

ccccccccccccccccccccccccccccccccccccccccccccccccccccoccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

TJN64456C6C6Û60 13. 2 C 2 6 C C C C C Û C O X

2 2 6 C 6 C 6 C 6 Û 6 0 1.5BTT

cccccccccoooC C C C C C C C C Û O CC C C C C C C C C Û O CcccccccccoooC C C C C C C C C Û C OcccccccccooocccccccccooocctccccccooocccccccccooocccccccccoccC C C C C C C C C Û C OC C C C C C C C C Û Û OcccccccccoooccccccccccccC C C C C C C C C Û O OC C C C C C C C C Û C CC C C C C C C C C Û O OC C C C C C C C C Û O OcccccccccoooC C C C C C C C C Û O OC C C C C C C C C Û O OcccccccccocccccccccccoooC C C C C C C C C Û O Occcccccccccc

2C14CCCOOQOf676C6C6060602C16CCCOOOOO6C140CCCCQOOCCCÛÛOCOOOOOcccooocooooocccococoooocCGOOOCCGOCOOCCCÛOOCÛOOOOcccccccccococcccccccocccCÛCOOCCCCOOOCCCOCCCOÛOQOCÛOOOOCOOOOOcccccococooocccooccccoocccccocccococcccoccccoccccccccocoooooccoccccoococCCCÛOCCOOOOOcoooooccoooocccccccoococcccccccccocccccooococooocccocccoooooCGCOOCGOOOOOcccccccococcCCOOCCCCGOOC

UM 64A5446C6C60

2360606C6C60ococcccoooooocccooooooooccccoocoooooccccoocooococoooooooooooccccoooooooooccoooooooooocooooooooooCCCGCCCCOGOOOCCOCOCOOCGOcccocoooocooGCCCCOCOOGÔOccccoocooooocccoooooooooCCGOOOOOOOOOccccccocooooccccccodccooCCOCCGOOOOCOccoccooooococccoocooocooccoooocoocooccoccooooocooccccooooococccoccoooooooccccoooooooCCOCOGOOOOOO

RESULTATS DE LA DERIVATION SYMBOLIQUE

Fonction sous forme Polonaise préfixée telle qu'elle ressort de la liste SLIP

rara

B

C

C

X

UN

ZER ( ** X

** X (

ZER ( Cos (

( * UNM (

( + ( +

DEUX ) ) ( * A

DEUX UN ) ) UN ) )

4- ( * C X ]

* ( Sin ( 4- 1

( * ZER X ) 1

) Df *

[ *ZER )

Cette fonction est équivalente à la notation courante :

( ZER x X2 + A X DEUX x X (DET3X " x U ff ) +

( ZER x Cos (C.X 4- D) + B x UM x Sin ( C.X + D) x ((ZER x X + C x UN) 4- ZER))

Cette écriture est évidemment plus longue qu'il n'est nécessaire car elle

comporte encore des termes surabondants. Une notation plus concise donnerait:

(A x X (DEUX ~ M) ) 4- ( B x TOI x Sin( C.X+D) x C )

En ne supprimant que les termes ZER x ... , en remplaçant les termes

ZER 4- ... par ... et les termes UN x ... par ... Soit :

(

D

B

C

* DEUX (

UNM ( *

•*-* (

( Sin (

DEUX UN ) ) )

( * C X )

Ceci est obtenu grâce à un traitement récursif par la fonction FORCOR, qui

partant de la formule dérivée avec les termes surabondants élimine ceux d'entreeux qui sont facilement reconnaissables. Fig. VI.14.

Fig. VI.12 Fig. VI.13

Page 65: SLIP: Langage de listes symétrique Applications

13579

112

14161820152223

40

ELIMINATION DES TERMES SURABONDANTS

FONCTION FORCOR

FCNCTICN FCPCnPd. )

FCNCTICN F O R C O R C L )PLUS=2M+F C I N S = 1 H -FP.rC=U*C T V = U /S IMJ=2»-SNCCSI = 2 f -CCPUIS=2H«*JlJN=2hUNOEUX=3hOEU

LU=L/1PPFLA P P E LAPPELAPPELA P P E LA P P E LA P P E L

4l

21

INTRDD(PLUStLUS)ÎNTRDD( FOINS, MOINS)1NTPOC(PROD,MROD)I N T R H D I D I V , N I V )I N T P D D t S I N U , I N L ' ÎINTRnC(COSI ,LOSI )I N T R D C ( P U Ï S , M U I S )

L N = L A D P E ( L A )IDC=LSG(CONT(LU-1) )SYMB = C C N T ( L S D ( C O N T ( IDC) )-l)A P P E L INTRTD( SYMB,LYMB)IS1=LSD(CONT(LSD(CONT( 100))) )IS2=LSD(CONT( IS1) )SYMB1 = CONT( IS1-1)S Y H R 2 = C O N T ( IS2-1)IMPRIMER 100.SYMB, I SI , I S2, SYMP1 , S YMB2 ,LUSI (LYyB-LUS) l ,2 , lS Î ( L Y M P - W R Q O ) 3 , 2 , 3S I (LYHR-MOINS)5 ,2 ,ES I (LYME-NÏVn ,2 ,7

25

173031

3332W3513

100

, SYVB ,LU)

S H L Y M E - I N U l l l , 2, 11S I ( L Y M P - L O S I ) 1 3 , 2 , 13A P P E L P A R M T 6 ( C O N T ( L N ) , I S2, SYMB1ITC1=HCRCOR( IS1)APPEL PESTR6(MG, I S 2, SYMB 1, S YMB2 , SY/-R ,LU)A P P E L 1NTRCI(MG,LN)A P P E L P A R M T 7 ( C O N T ( L N ) , I S 2 , S Y M B l , S Y y B 2 , S Y f B , L U , I T C UITC2=MORCOR( IS2)APPEL PFSTR7(MG, IS2, SYMB 1, SYMB2 ,LYNB » LU, I TC1 )A P P E L 1NTRCI (MG,LN)CCNT]=CnNT( IT01-1)C.rNT2=CONT( ÎT02-1)S K L Y M P - L U S ) 14, 15,14S I ( L Y M E - M O I N S ) 1 6 , 15,16

R, 17, 18) 2 C T l ^ t 2 C

A ILEP A 13S U C C N T 1 - Z E P ) 2 2 , 2 1 , 2 2S I ( C C N T 2 - Z E R ) 1 3 , 2 3 , 1 3ADC=CONT(LU-1)APPEL INTRDI(CONT1,LU-1 )S I ( L S G ( C G N T 1 ) - L S D ( C O N T 1 ) ) A C , 4 1 , A CA P P E L INSIND(C,-1,-1,LL)

FCNC.TION FORCOP(L)

lt-lt-1. L L )ALLEF t 25APPEL IMSIND(A L L E R A 25AOC=CCN'T(LU-1)APPEL INTPOI(CnNT2,LU-l)S U L S G ( C O N T 2 ) - L S O ( C O N T 2 ) )42,A3,42APPEL INSINC(Ct-l f- l tLl)ALLER A 25A P P E L I N S l N C f l ,-l ,-l ,Ll)APPEL ÎEFLST(AOD)ALLER A 13S I (CCNT1-ZFR)3C,31 ,3CSHCCNT2-ZFR)33 ,31 ,33ACC=CCNT(LU-1)APPEL TNSÎNO(0,-1,-1,LU)APPEL INTRDI(ZER,LU-1)APPEL I F F L S T ( A O D )ALLER A 13SI(CCNT1-UN)32,21,.32S I ( C C M 2 - U N ) 1 3 , 2 3 , 1 3S I ( C C N T 1 - Z E R ) 3 5 , 3 1 , 3 5S I ( C O N T 2 - U N ) 1 3 t 2 3 , 1 3APPEL ÎNTRDO(LU,FORCC1R)IMPRIMER ICI,FORCORRETOURfCOELE(5X,EHSYMB=,A6,5(2X,012) , / /»MODELE(5X,7hFORCOR=,012, / / )F IN (1 ,1 ,0 ,0 ,0 , C, 1 , C , C , 1 , C , C , C , 0 , 0 )

Fig. VI-H

prvii—t

k*

LISTE FORMULE CORRIGEE

LA= 0 7 7 3 1 5 0 Q O C O C

277205077313 O O O C C O C O C O C C

077315077307 2 0 2 C É C 6 C 6 C 6 C + +

177313077205 077261C77261

2772^7077255 C C O C C C O C C C C 3

077261C772Ï3 Ï46C6C6C6060 *

077255C77247 2 1 6 C 6 C 6 C 6 C 6 C A

177253C77261 C77251C77251

277237C772A5 C C C C C O C 0 0 0 0 3

C77251C77243 546C6C606060 *

C77245C77237 242564676060 D E U X

177243C17251 C77233C77233

277221C77227 000000000003

C77233077225 545460606060 **

C77227C77221 67606C606060 X

177225077233 077223077223

177307077315 07 ~i 14 1 C77141 277213077217 C00000000003

277127C77135 C C C C C C C C C C 0 3 C77223077215 406060606060 -

0771MC71133 5 4 6 C 6 C 6 C 6 C 6 C * 077217077213 242564676060 D E U X

07713Î077127 2 2 6 C 6 C 6 C 6 C 6 0 B 077215077223 644560606060 UN

1771330771M C77131077131

277117077125 C C C O C C 0 0 0 0 0 3

077131C77123 5A6C606C6060 *

C77125C77117 6445446C6060 U N N

177123C77131 C77121C77121

277C61C77115 000000000003

C77121077111 546060606060 *

177115077C61 077113077113

277103077107 000000000003

077113077103 624560606060 SK

177107077113 077105077105

277065077101 000000000003

077105077075 202060606060 ++

177101077065 077077077077

277067077073 000000000003

077077077071 546060606060 *

077073077067 2360606C6060 C

077071077077 67606060606C X

077075077105 246060606060 0

C77111C77121 236C6C606060 C

Fig.

Page 66: SLIP: Langage de listes symétrique Applications

- 64 -

CONCLUSION

Le travail que nous avons fait surles langages de listes a pour but

de montrer l'utilité que peuvent avoir, dans un grand nombre de domaines,

les listes. L'idée essentielle est celle de structure qui prend une im-

portance égale à celle du contenu des positions de mémoires. Ceci a été

mis en évidence essentiellement dans les travaux sur les listes de symboles,

sur les listes de roots pour la recherche lexicographique, dans les program-

mes de calcul de dérivée et de calcul de valeur d'une fonction.

Cette étude, et plus particulièrement l'étude de SLIP, n'est qu'une

approche de l'idée de listes, car nous n'y avons vu qu'un moyen de résou-

dre des problèmes complexes qui étaient difficiles à programmer par les

méthodes classiques. Mais les listes ouvrent des voies nouvelles, encore

peu explorées. La reconnaissance de symboles introduit à la traduction

automatique, à la reconnaissance de structures, à l'apprentissage, à

l'intelligence artificielle. Plusieurs équipes aux Etats-Unis se penchent

sur ces problèmes, et ont déjà obtenu des résultats intéressants. D'autres

équipes, plus pragmatiques, s'intéressent à l'intégration formelle, à la

résolution d'équations différentielles. Il existe des programmes réali-

sant le calcul d'erreurs en physique. Tout ceci est relativement récent,

car les premiers travaux n'ont débuté qu'en 1961 et les premières réali-

sations homogènes datent de 1963.

Les programmes et les méthodes que nous avons développés ici ne sont

encore que des exemples. Aucun d*entre eux ne peut servir à un travail

continu, être incorporé à un processus de production ; ce sont seulement

les méthodes qui ont été exposées, car ce sont elles qui constituent les

innovations. La mise au point de tous ces programmes est longue et néces-

siterait des équipes importantes, mais il n'est pas interdit de penser que

nous verrons , dans un avenir relativement proche, de tels systèmes devenir

effectifs et différents laboratoires les avoir à leur disposition par

"télé-processing", c'est-à-dire que chaque utilisateur dispose d'un clavier

sur lequel il frappe son programme, ou ses données, ceci étant transmis à

une machine centrale, disposant des fonctions étudiées et travaillant en

fl-

ESJ

- 65 -

listes, par le moyen de lignes téléphoniques, les résultats revenant de

la même manière, avec un temps de réponse très court. Ces méthodes sont

directement applicables à la recherche bibliographique, à la consultation

de fichiers importants, à la recherche documentaire. L'utilité des langages

de listes est évidente, à ce stade de travail. Les utilisateurs n'ont pas

à connaître les langages, la machine traduisant automatiquement le langage

des utilisateurs en un langage de listes, langage qui a été utilisé pour

constitution du fichier, pour la mise sur bandes ou disques des documents,

des références bibliographiques, des méthodes de calcul des dérivées, des

intégrales, des erreurs...

Les langages de listes sont actuellement rentrés dans l'ensemble des

procédés utilisables directement par les programmeurs. IBM termine actuel-

lement la mise au point d'un langage d'une grande généralité : le PL 1,

plus efficace que FORTRAN ou ALGOL, qui utilise les listes. Beaucoup de

procédés de traitement utilisent les listes, que ce soit pour faire des

travaux récursifs, des opérations sur symboles, ou du partage de temps.

Les techniques de "time sharing" ont été mises au point après que les listes

aient été utilisée/s. Le traitement des priorités, des interruptions de

travail, des transferts de contrôle, est réglé par des méthodes de listes.

C'est dire qu'actuellement, les listes sont l'instrument de base de la

recherche en programmation.

Page 67: SLIP: Langage de listes symétrique Applications

TABLE DE CORRESPONDANCE DES NOMS DE SOUS PROGRAMMES SLIP

FRANÇAIS ET AMERICAINS

ET ORIGINE DES DENOMINATIONS MNEMONIQUES

AVLD

ASLG

AVSD

AVSG

AVLED

AVLMD

AVLND

AVLEff

AVLMG

AVLMG

AVSED

AVSMD

AVSMD

AVSEG

AVSKG

AVSMG

QUEUE

ELIM

INI TED

INLSTD

INLSTG

INITCÏÏ

INTGER

IEPLST

IEFCÏÏ

LCNVCE

LISTE

ADVLR

ADVLL

ADVSR

ADVSL

ADVLER

ADVLWR

ADVLNR

ADVLEL

ADVLUL

ADVLNL

ADVSER

ADVSWR

ADVSMR

ADVSEL

ADVSWL

ADVSML

BOT

DELETE

INITAS

INLSTR

INLSTL

INITRD

INTGER

IRALST

IRARDR

LCNTR

LIST

Avance linéaire droite

Avance linéaire gauche

Avance structurelle droite

Avance structurelle gauche

Avance linéaire données droite

Avance linéaire mixte droite

Avance linéaire noms de liste droite

Avance linéaire données gauche

Avance linéaire mixte gauche

Avance linéaire noms de liste gauche

Avance structurelle données droite

Avance sti-ucturelle mixte droite

Avance structurelle noms de listes droite

Avance structurelle données gauche

Avance structurelle mixte gauche

Avance structurelle noms de listes gauche

Queue de liste ou bottom/Donnée de la dernière cellule

Elimination dlune cellule. Delete = renvoi.

Initial available space. Initialisation espace disponible

Intercaler une liste à droite

Intercaler une liste a gauche

Initialiser le Readei; Initialiser Chercheur -

Donne un nom Entier Fortran à une cellule

Erase list. Efface liste

Erase reader. Efface chercheur

Le compteur de niveau (du chercheur). Level counter

Créer une tête de liste vide

Page 68: SLIP: Langage de listes symétrique Applications

LOCT

LNOMCH

LCPCH

LCRTCH

LISTMT

LRNV1

LRNVT

MADGCH

MADDRT

MADNQTJ

MADNTT

MTLIST

HAMTS'T

NUCELL

NULSTG

NULSTD

IMMGCH

IMMDRT

PARMT2

E.JQUEJTT

NUTT

NVQU

IMPLST

RCELL

SEQLD

SEQLG

SEQSD

SEQSG

REED

REEL

SOBST

SUBSTT

SUBSQU

EGAL

TETE

LOCT

LOFRDR

LRDRCP

LRDROV

LISTMT

LVLRV1

LVLBVT

MADLFT

MADRGT

MADNBT

MDNTP

MTLIST

NAMTST

NUCELL

NULSTL

NULSTR

ÏŒTLFT

NKTRGT

PARMT2

POPBOT

POPTOP

NEWTOP

KBWBOT

PRLSTS

RCE.LL

SEQJJi

SEQLL

SEQSR

SEQSL

REED

REEL

SUBST

SUBSTP

SUBSET

EQUAL

TOP

Location adress of Reader

Le nom du chercheur. Link of Reader

Copie le chercheur Reader copy

Crée le chercheur Reader

List enrpty . Liste vide

Level reader up to 1

Level reader up to top

Adress of left * adresse gauche

Adress right #adresse droite

Adress of Bottom adresse queue

Adress of Top adresse tête

Renvoie corps de liste en réserve

Name Test . Teste si nom de liste

New cell Nouvelle cellule

Null list left Annule la partie gauche

Null list right Annule la partie droite

Next cell left Immédiatement gauche

Next cell right immédiatement droite

Paramètres. Deux paramètres protégés

Pop Bottom Renvoie la dernière cellule

Pop Top Renvoie la tête de liste

Nouvelle tête New Top

Nouvelle queue New queue

Imprimer liste Print list

Renvoie cellule Rester cell

Séquence linéaire droite Sequence linear right

Séquence linéaire gauche Sequence linear left

Séquence structurelle droite Séquence structural right

Séquence structurelle gauche Séquence structural left

Read » lire donnée /Réel fonction variable réelle

Substituer Sustitute

Substituer tête Sustitute Top

Substituer queue Sustitute queue

Test Egalité Equality test

Tête de liste Sommet = Top

DERROR

NAMEDL

LISTAV

ITSVAL

LDATVL

MADATR

MAKEDL

SCHATR

NEWVAL

NOATVL

MTDLST

ERADLS

MRKLST

MRKLSS

LSTMRK

Description of error

Name of description list

List available (description) for LST

Value of attribute (its value)

List description attribute value

M Adress of attribute

Make description list

Search for attribute right

New value for attribute

Null attribute and value

Empties description list

Erases description list

Mark on liste (L)

Mark on list structure (L)

Mark of list (L)

Page 69: SLIP: Langage de listes symétrique Applications

BIBLIOGRAPHIE

J. WEIZENBAUM Symétrie List Processor

Communications of ACM Septembre 1963

D.G. BORROW et B, RAPHAEL A comparison of list processing computer languages

Communications of ACM Avril 1964

J. Me. CARTÏÏY et al. LISP 1.5 Programmers Manual

The MIT Press Cambride - Mass 1962

A, NEWELL et al Information Processing Language V manual

The Rand Corporation

Ho GELERNTNER - HANSEN et ŒRBERICH .FORTRAN Compiled List processing language

Communications ACM

J. COHEN et NGUlffiN HQU DUNG Définition de procédures LISP en ALGOL et exemple

d'utilisation. RFTI Chiffres V01 8 N° 4 1965 p 271-293

T. EVANS - J. COHEN - M0 TRILLING - Y. SIRET et 0. LECARME>

Publications à l1occasion du syprphosium de traitement de listes

à l1Institut de Mathématiques appliquées Grenoble - Mars 1966

J.A. SAXON Programming- the IBM 7090

Prentice Hall Inc. 1963

J. Me CARTHY Recursive functions of Symbolic expressions and their computation

by Machine. Communications of ACM Avril 1960

P. DEBRAINE Techniques binaires Application aux automatismes et aux machines

de Traitement de l'Information. INSTN - Saclay 1965-1966

Manuscrit reçu le 7 juin 1966

Page 70: SLIP: Langage de listes symétrique Applications

ANNEXE

FONCTIONS ET SOUS PROGRAMMES SLIP

Page 71: SLIP: Langage de listes symétrique Applications

*LSG

LSG

AC

MG

AUX

COMPTENTREESXARADSRARAL3RDRADEtXTRABCSFIN

12LSGMG.41.4AC**AUXAUX**.42,41

*MAOD

MADD

MGPREND LA PARTIE DECREMENT DU PARAMETRE

COMPTENTREESXARADDAGEEXTRAFIN

8MADDMG.41.418*#,42.4

DONNE L'ADRESSE DU PARAMETRE

*ID

*LSD

LSD

AC

MG

AUX

COMPTENTREESXARADSRARALSRARADDAGEEXTRABCSFIN

13LSDMG.41.4AC#*AUXAUX18**»42.41

PREND LA PARTIE ADRESSE DU PARAMETRE

ID

AC

MG

AUX

COMPTENTREESXARADSRARALSRPRADDADEEXTRABCSFIN

13IDMG,41.4AC**AUXAUX15**»42.41

DONNE LE CONTENU DE LA ZONE ID DU PARAMETRE

ot-3M

%Ul

•rlag

§C/3

*INHALTCOMPT 12ENTREE INHALT

INHALT SXA MG.4RAD 1.4SRA KA

KA RAD **DAD 18SRA KB

KB RAD **MG EEX **.4

TRA 2.4FIN

PREND LE CONTENU DE LA MEMOIRE POINTEE PARLE PARAMETRE

*INTRDDCOMPTENTREE

INTRDD SXARADSRARADSRA

KB RADKA SOR

MG EEXTRAFIN

12INTRDDMG.42,4KA1,4KB*****»,43,4

MET LE CONTENU DU PREMIER PAMAMETREDANS LE SECOND

Page 72: SLIP: Langage de listes symétrique Applications

*INSIND

INSIND

KA

AC

AD

TDI

BA

BC

BD

TDG

ÇA

ce

CD

TDD

DADB

MG

UNM

COMPTENTREESXARADSRARADDADSRASRASRASRARADSRASRARADADDTZERADDAGSRPTRARADSRPRADSRASRARADADDTZERADPDXSXDTRARADPDXSXDRADSRASRARADTZEADDRADPDXSXATRARADPAXSXARADSOREEXTRAOCT

58INSIMG»44,4KA#*18TDITDGTDDDB1,4ACAD•**UNMTDI##15AUXBA#*AUX2,4BCBD**UNMTDG##0,1AUX,ÇA##0,1AUX,3,4ceCD##TDDUNM##0,1AUX,DA#*0,1AUX,AUX##**,45,40000

ND

DANSLOGELE SELE TR

1

1

1

1

01000000

A 3

LA MEMOIRE POINTEE PAR LELE PREMIER EN PARTIE IDCOND EN PARTIE DECREMENT

TROISIEME EN PARTIE ADRESSE

DERNIER PARAMETRE

Page 73: SLIP: Langage de listes symétrique Applications

cc

cc

cc

FONCTION AVLEG(LCH,A)AVANCE LINEAIRE GAUCHEARRET SUR TOUS LES SYMBOLESA=AVLG(LCH,G,0)S K A j l . Z f 1AVLEG=RE£D(LCH)

RETOURFIN

SAUF LE.5 NOMS DE LISTE

FONCTION AVLED(LCH»A)AVANCE LINEAIRE DROITEARRET SUR TOUS LES SYMBOLESA=AVLD(LCH»0,0)SI (A)l,2»lAVLED=REED(LCH)RETOURFIN

SAUF LES NOMS DE LISTE

FONCTION AVLD(LCH»J,K)FONCTION REALISANT LiAVANCE LINEAIRE DANS UNE LISTEUTILISE LE SUIVEUR LCH~CLCH=CONT(LCH>AVANCE A DROITELK=LSDCCONT(LSG(CLCH)))CAND=CONT(LK)APPEL îNSDIR(-l,LK,-l,CLCH)SI (ID(CAND)-2)lt2»lSI ( ID(CAND)-J)3.4»3SI ( ID(CAND)-K)5,4,5AVLD=0.ALLER A 6AVLD=-1.0APPEL INTRDI(CLCH.LCH)RETOURFIN

FONCTION AVLG;LCH,J,K)FONCTION REALISANT LtAVANÇA LINEAIRE DANS UNE LISTEAVANCE A GAUCHEUTILISE LE SUIVFUR LCHCLCH=CONT(LCH)LK=LSG(CONT(L5G(CLCH>))CAND=CONT(LK)APPF.L INSDIR(-1»LK,-1,CLCH)SI(ID(CAND)-2)1,2,1SI(ÏDÎCAND)-J>3>4,3SI (ID(CAND)-K)5,4,5AVLG=0.ALLER A 6AVLG=-1.0APPEL INTRDI(CLCH,LCH)RETOURFIN

FONCTION AVLMD(LCH.A)AVANCE LINEAIRE DROITEARRET SUR TOUS LES SYMBOLESA=AVLD(LCH,1,0)SI ( A ) 1,2 » 1AVLMD=REED(LCH)RETOURFIN

O

MO

03

W

FONCTION AVLMG(LCH,A)AVANCE LINEAIRE GAUCHEARRET SUR TOUS LES SYMBOLESA=AVLG(LCH>1,0)S I < A ) 1 * 2 , 1AVLMG=RFFD(LCH)RETOURFIN

FONCTION AVSG(LCH»J,K)AVANCE STRUCTURELLE GAUCHER=CONT(LCH)LCP=LSG(R)CAND=CONT(LCP)SI(ID(CAND)-!)1>6,1

1 LCP=LSG(CAND)APPEL INSDIR(-1»LCP,-1,R>CAND=CONT(LCP)CRITERES D'ARRET.. ID= 1, 2, 0.SI ( ID(CAND)-2 )3î^-,3

3 SI(ID(CAND)-J)7»8»77 SI(ID(CAND)-K)5,8»55 SI(ID(CAND)-!)1*6»!6 M=NUCELL(Z)

APPEL INTRDKR.K)LE SUIVEUR TIENT COMPTE DE LA STRUCTURE QU'IL A TRAVERSEEAPPEL INTRDI(CONT(LCH-1),M-1)APPEL INSINDI-1»LSG(CONT(LCP-1))»LCNVCH(LCH)+1tLCH-1)APPEL INSDIR(-1»-1»M,R)CAND=CONT(LSG(CONT(LCP-1)))ALLER A 1

4 SI(LCNVCH(LCH))9»10,9SI FIN DE STRUCTURE A=-l.

10 AVSG=-1.0ALLER A 12

9 LK=LSD(R)R=CONT(LK)APPEL INTRDI(CONTCLK-3),LCH-1)CAND=CONT(LSG(LK))APPEL RCELL(LK)ALLER A 1

8 AVSG=0.12 APPEL INTRDI(R»LCH)

RETOURFIN

CC

CC

FONCTION AVLND(LCH,A>AVANCE LINEAIRE DROITEARRET SEULEMENT SUR LESA=AVLD(LCH,1,1 )SI (A) 1,2,1AVLND=REED(LCH)RETOURFIN

NOMS DE LISTE

FONCTION AVLNG(LChUA)AVANCE LINEA-IRE GAUCHEARRET SEULEMENT SUR LES NOMS DE LISTEA=AVLG(LCH,1,1)SI(A)1,2,1AVLNG=REED(LCH)RETOURFIN

VJ1

Page 74: SLIP: Langage de listes symétrique Applications

cc

cc

FONCTION AVSED(LCH.A)A«AVSD(LCH»OtO)

2 AVSED*REED(LCH)1 RETOUR

FIN

FONCTION AVSEG(LCH,A)AVANCE STRUCTURELLE GAUCHEARRET SUR TOUS LES SYMBOLES SAUF LES NOMS DE LISTEA«AVSG(LCH,0,0)

2 AVSEG-REED(LCH)1 RETOUR

FIN

FONCTION AVSMD(LCH»A)AVANCE STRUCTURELLE DROITEARRET SUR TOUS LES SYMBOLESA«AVSD(LCH.1,0)

2 AVSMD*REED(LCH)1 RETOUR

FIN

FONCTION AVSD(LCH.J»K)AVANCE STRUCTURELLE DROITED-CQNT(LCH)LCP=LSG(D)CAND«CONT(LCP)SICID(CAND)-1)1»6»1

1 LCP«LSD(CAND)APPF.L INSDlR(-l.LCPt-ltD)CAND=CONT(LCP)CRITERES D'ARRET.. ID« 1» 2t 0.SI(ID(CAND)-2)3»4»3

3 SI(ID(CAND)-J)7.8*77 SI UD(CAND)-K)5t8»55 SI(ID(CAND)-1)1.6.16 M=NUŒLL<Z)

APPF.L INTRDKD.M)LE SUIVEUR TIENT COMPTE DE LA STRUCTURE OU»IL A TRAVERSEEAPPEL INTRDI(CONT(LCH-l),M-1)APPEL INSIND<-ltLSG(CONT(LCP-D).LCNVCH(LCH)*!.LCH-1)APPEL INSDlR(-lt-ltMtD)CAND=CONT(LSG(CONT(LCP-1)))ALLER A 1

4 SKLCNVCH(LCH) )9t in»ySI FIN DE STRUCTURE A*~i.

10 AVSD»-1.0ALLER A 12

9 LK=LSDi!D)D=CONT(LK)APPEL INTRDKCONT(LK-l)» LCH-1)CAND«CONT(LSG(D»)APPEL RCELL(LK)ALLER A 1

8 AVSD=0.12 APPEL INTRDI(D.LCH)

RETOURFIN

FONCTION AVSMG(LCH.A)C AVANCE STRUCTURELLE GAUCHEC ARRET SUR TOUS LES SYMBOLES

A»AVSG(LCH»1»0)SI(A|1*2*1

2 AVSMG-REED(LCH)1 RETOUR

FIN

FONCTION AVSND(LCK,A )C AVANCE STRUCTURELLE DROITEC ARRET EXCLUSIVEMENT SUR LES NOMS DE LISTE

A=AVSD(LCHt l f 1 )S I (A ) I t2 , l

2 AVSND=REED(LCH)1 RETOUR

FIN

FONCTION SUBST(D»N)C REMPLACE LA DONNEE DE LA CELLULE N PAR LA DONNEE D

LBACK=LSG(CONT(N))C PREND POUR VALEUR L'ANCIENNE DUNNEE

SUBST=ELIM(N)APPEL IMMDRT<D»LBAClORETOURF I N

FONCTION AVSNG(LCH.A)C AVANCE STRUCTURELLE GAUCHEC ARRET EXCLUSIVEMENT SUR LES NOMS DE LISTE

A=AVSG(LCH,1»1)

FONCTION SUBSTT(D»LST)C REMPLACE LA DONNEE DE LA CELLULE DEC PREND POUR VALEUR L'ANCIENNE DONNEE

SUBSTTsSUBST(DfLSOÏCONT(LST)))RETOURFIN

EIE PAR D

2 AVSNG=REED(LCH)1 RETOUR

FIN

FONCTION E G A L ( M t N )C TEST D 'EGALITE DES 2 SYMBOLES M ET N

SI (M-N)1»2»1C SI OUI EGAL =0.2 EGAL=0

RETOURC SI NON EGAL =-1.1 EGAL=-1

RETOURF I N

FONCTION SUBSQU(D»LST)C REMPLACE LA DONNEE DE LA CELLULE DE QUEUE PAR DC PREND POUR VALEUR L'ANCIENNE DONNEE

SUBSQU=SUBST(D»LSG(CONT(LST)))RETOURFIN

Page 75: SLIP: Langage de listes symétrique Applications

'A 8

CREATION DE LA RESERVE

CINITEDSOUS PROGRAMME INITED

C IMITAS CREE LA LISTE D'ESPACE DISPONIBLEDIMENSION W(200)»X(100),LAVS(2)COMMUN CREF»X,LAVS

C RECHERCHE LES LIMITES DE L'ESPACE DISPONIBLEAPPEL KFINAL(LIMSUP)LIMINF=MADD(LAVS)N=LIMINF-LIMSUPFAIRE 1 1=1,100J=2*I-1

C CREE 100 LISTES VIDES •«PUBLIQUES»«APPEL INSD-IRf OtMADDtWt J) ) »MADD(W(J) )APPEL INSDIR(2»MADD(W(J)),MADD(W(J))

1 APPEL INSDIR(-1»-1»4095,W(J+l))FAIRE 2 I-1»N

2 LAVS(I)=0K = N-2FAIRE 3 I=lfKf2

3 APPEL INSDIR(-lt-ltMADD(LAVS( 1+2) ).»LAVS( I ) )C LOGE LES EXTREMITES DANS LA CELLULE CREF

APPEL INSDIRfO,MADD<LAVS(N-l))»MADD(LAVS<1))»CREF)RETOURFIN

INEFFAÇABLES« X ( I ) )» W ( J ) )

*KFINAL

KFINAL

AMG

C337

COMPTENTREESXARADSRARADADDDLGSOREEXTRAOCTFIN

14KFINALMG,41,4AS(EXEM)C33718•***#,42,4000000000340

A 9

RENVOI EN RESERVE

O.

UJ

•SI

UJo

Ilt-<nj

jii

Ul'.O<J>UJceo

LUi-UJ

oa

UJQ

UJUJzO rio i

ace —o t-ui u_i o< -i

t J Z— X. Oa. z u— o -UJ U OH- U5UJ O -I

z a: zo a o— u ce(- M O(J UJ Oz a t- »- zo o uj 10 •-u. i- H- te u.

-i a.K. t-o uu o

> i-z

— UJ oa z u— 2: —UJ O O3 u mUJ -J3 Q —O Z t-

UJ Zz ce oo a. o» n cet- UJ 3U 00Z t- UJt- ZO O OUI «u. ça a ce u.

UJaUJUJzOO

— UJ O* -J U- < _O > V3UJ U)Ul Ul _l<X X —

Z I-z o zO <J O•- uo;•- o H 3u z ooZ UJ Ult- Zo ce uj uj —u. a. ce ce u.

zUJ

Ul Oce za j

z -uoo •

oUl II 11-J s:O — Ul

UJu

Ul

ce o _i rjUl •>io tu ce .-<u >- o —ce — uj uj rg

* t- _i iz— < —UJ J D Ul — O•-"UJ f. H- O-O t-ZX>z </>o o cer o uj u u uj

— x oz — ce iz - LJ - a. —

O 07CC — 3! _luiu. a 10 >-uj

UJ —ce •t- 10t- Cf.aUJ UJo ceui uj_i i-o uij <UJU UJ

uj s;z <O a:- o00

cez ao« ui

«UJ

ÏOj ceui m- M

o o -•_j _i ~ z• » < ceo «-• 10 o-il 10 o• • Ul U.

I _l Z <

I | i o

l _ _ _ û o m z^ K > - _ I Z Z »r~— z z -i •- — «-< *J - O O U J i O l / J i •>

• Z Ï Î O O Z Z r t Xo — — ce — •- — •

ce vj où ce ujO Z - J - J U J U J U J O U J 1 —K - ~ « NC.Q.Q . I -O4Z

c e u i _ i _ j < < < c e z u.

-luiliio

ceUl

10

O

•3<UJ

UJaceoUlH-ao

a. oui^ zZ UJai t-z oUl U

CE UJ•

r > ceL< •- O —_l D UJ I— l/> J UI < _l --u w > — — zU. -J I Z -UJ UJ U — _l•-UJ Z > »- _l -H

Z Z Z Z Ul • «Z •- O U O uruoï^-i u c e » <» » . « ~- r-. ce> - _ J O I I Q J — ces<J Ul Z UXJ U) UJ Z Ul Oz u j u . j _ i a — z-ii-zO ce ce uj » u a. "i » -J uj —u.oa > - z z < i n z <œu.ce

< m r-l fSI

ce

Page 76: SLIP: Langage de listes symétrique Applications

I'1t''

FONCTION INITCH(LCH)C INITRD RENVOIE LE CHERCHEUR EN TETE DE LA LISTE COURANTE

APPEL INSIND(-1.LSG(LCH-1),-l,LCH)C PREND COMME VALEUR L'ADRESSE DU CHERCHEUR

INITCH=LCHRETOURFIN

CEJQUFONCTION EJQU(P)

C POPBOT RENVOIE EN RESERVE LA QUEUE DE LA LI5TE PC PREND POUR VAuEUR LA DONNEE DE P

EJQU=ELIM(LSG(CONT(LOCT(P))))

RETOURFIN

i

FONCTION IEFLST(P)C IRALST RENVOIE LA LISTE P EN RESERVE

L=LOCT<P)C TESTE LE COMPTEUR DE NIVEAUC LE DIMINUE DE UNE UNITE

APPEL INSIND(-1»-1»LCNVCH(L)-1.L-1)IEFLST=LCNVCH(L)SI(IEFLST)1.2»1

C S»IL EST NUL RENVOI DU CORPS DE LISTE2 APPEL MTLISTIP)N=LSG(CONT(L-1))SI(N)3,4,3

C TEST DtEXISTENCE D»UNE LISTE DE F90PRIETES3 NOUV=NUCELLAPPEL INSINp(lt-lt-ltNOUV)APPEL !NSlND<-lfNtN»NOUV-l)

C RENVOI DE LA LISTE DE PROPRIETE ET DE LA TETE DE LISTEAPPEL RCELL(NOUV)

4 APPEL RCELL(L)1 RETOUR

FIN

CEJTTFONCTION EJTT(P)

CPOPTOP RENVOIE EN RESERVE LE SOMMET DE LA LISIE HC PREND POUR VALEUR LA DONNEE DE H

E J T T = E L I M ( L S D { C O N T ( L U C T ( H ) ) ) )RETOURF I N

FONCTION IMMDRT(M»A)C NXTRGT CREATION D'UNE CELLULE A DKÙIIE DE AC PREND COMME VALEUR L«ADRESSE DE LA NOUVELLE CELLULE

ID*NUCELL(Z)LD=LSD(CONT(A) JAPPEL INSIND(-l.ID.-ltLD)APPEL INSIND(-lt- l t ID»A)APPEL INSIND<OtA.LD.ID)

C SI M EST UN NOM DE LJSTEtACCROCHE LA LISTE MSI(NAMTSTCM))lt2.1

2 APPEL INSIND(,1»-1»-1»ID)APPEL INS IND('-1»-1»LCNVCH( M )-*•!.M-l)

C INTRODUIT M COMME DONNEE DE LA CELLULE1 APPEL INTRDKMtID-1)

IMMDRT»IDRETOURFIN

FONCTION INLSTD(M»A)C INLSTR INTERCALE LE CORPS DE LISTE M A DROITE DE A DANS LAC LISTE DE A

L»LOCT(M)ITOP-LSD(CONTJL))IBOT«LSG(CONT(L))

C M DEVIENT UNE LISTE VIDEAPPEL INSIND(-1»L»L»L)ISUC*LSD(CONT(A>)APPEL INSIND(-1.-1.ÎTOP,A)APPEL INSIND(-ltIBOTt-l»ISUC)APPEL INSIND(-1»A»-1»ITOP)APPEL INSIND(-lt-l,ISUC,IBOT)

C PREND POUR VALEUR LINLSTD-LRETOURFIN

FONCTION IMMGCH(M.A)NXTLFT CREATION DiUNE CELLULE A GAUCHE DE A

IG«NUCELL(Z)LG»LSG(CONT(A))APPEL INSIND(-l»-ltIG-»LG)APPEL INSIND(-ltIG,-1»A)APPEL INSIND(0»LG»A,ÏG)SI M EST UN NOM DE LISTE,ACCROCHE LA LISTE MSî(NAMTST(M))1.2*1

2 APPEL INSIND(1»-1»-1»IG)APPEL INSIND<-1»-1»LCNVCH(M)+1tM-1)INTRODUIT M COMME DONNEE DE LA CELLULE

1 APPEL INTRDI(M.IG-I)PREND COMME VALEUR L'ADRESSE DE LA NOUVELLE CELLULEIMMGCH=IGRETOURFIN

FONCTION INLSTGCMtA)C INLSTL INTERCALE LE CORPS DE LISTE M A GAUCHE DE A DANS LAC LISTE DE A

L«LOCT(M)ITOP«LSD(CONT(L)JIBOT«LSG(CONT(D)

C M DEVIENT UNE LISTE VIDEAPPEL INSIND(-l.L.LtL)IPRE«LSG(CONT<A))APPEL INSIND(-1.IBOT,-1,A)APPEL INSIND(-lt-l,ITOP,TPRE)APPEL INSIND(-ltIPRE»-ltlTOP>APPEL INSIND(-1»-1»A.IBOT)

C PREND POUR VALEUR LINLSTG-LRETOUR

Page 77: SLIP: Langage de listes symétrique Applications

cc

FONCTION LCNVCH(K)LCNTR PREND COMME VALUERK EST UNE TETE DE LISTE OULCNVCH=LSOtCONT«-l ) )RETOURFIN

LELE

NIVEAU DUSUIVEUR

COMPTEUR CC

C

C

FONCTION LISTE<K)LIST CREE UNE TETE DE LISTE VIDEPREND POUR VALEUR L'ADRESSE DE LA TETE DE LÎSTtL!STE=NUCELLfZ)APPEL INSDIRJO,LISTE.LISTE.LISTE)APPEL INSIND(2*LISTE»LISTE»LISTE)SI K=9 LE COMPTEUR D£ NIVEAU EST A 0.SI(K-9)2,1»2SINON K EST UN PSEUDONYME DE LA LISTE ET LE C.DE N. EST A 1,APPEL INSIND<-1»-1»1»LISTE-1)K=LISTERETOURFIN

CC

FONCTION LCPCH(LCH)LRDRCP PREND COPIE DU SUIVEURPREND COMME VALEUR L'ADRESSE DU NOUVEAU SUIVEURLCPCH=NUCELL(Z)NOUVCH-LCPCHNOW=LCHAPPEL INTRDKCONTCNOW) .NOUVCH)APPEL INTRDI(CONT(NOW-1)»NOUVCH-1JNOW=LSD(CONT(NOW))SI (NOM)1*2*1NEW=NUCELL(Z)APPF.L INSIND(-1»-1*NEW,NOUVCH)NOUVCH=NEWALLER A 3RETOURFIM

C

C

FONCTION LISTMT(P)LISTMT TESTE SI LA LISTE EST VIDEL=LOCT(P)SI(EGAL(CONT(L).CONT(LSD(CONT(L)))))3»4.3SI OUI PREND COMME VALEUR 0.LISTMT*0RETOURSINON PREND COMME VALEUR -1.LISTMT=-lRETOURFIN

cC

FONCTION LCRTCH(P)LRDROV CREE LE SUIVEUR POUR LA LISTEPREND COMME VALEUR L'ADRESSE DU SUIVEURLCRTCH-NUCELL(Z)APPEL INSINDO.LOCTfPJfAPPEL !NSIND(0»P»0»LCRTCH-1)RETOURFIN

CC

FONCTION LNOMCH(K)LOFRDR DONNE LE NOMLE SUIVEURL=LSG(CONT(K-1))APPEL INSDIR(0»L»L»L)LNOMCH=LRETOURFIN

DE LA LISTE COURANTS OU EST ACTUELLEMENT

CC

901

FONCTION LOCT(K)LOCT TESTE SI K EST UN NOM DE LISTESI OUI LOCT = <SI(NAMTST(K))1,2»1LOCT=K

• RETOURSINON MESSAGE D'ERREUR ET APPEL EXITIMPRIMER 901APPEL EXITMODELEUH1.65H UNE LISTE ETAIT DEMANDEE COMME OPERANDE MAIS N'A PU1 ETRE TROUVEE./.42H LE PROGRAMME EST MALHEUREUSEMENT TERMINE,,)

C

C

FONCTION MADDRT(A)DONNE L'ADRESSE DE LA CELLULE A DROITEMADDRT»LSD(CONT(A))SI C'EST UNE TETE DE LISTE DONNE LE NOMSU ID(CONT(MADDRT))-2)1,2.1APPEL INSDIR(O.MADDRT.MADDRT.MADDRT)RETOURFIN

CC

FONCTION LRNVKLCH)LVLRV1 FAIT REMONTER LE SUIVEUR D'UN NIVEAUPREND COMME VALEUR LCHLRNV1=LCHSKLCNVCH(LCH) >2 .3»2RETOURL=LSD(CONT(LRNV1))APPEL INTRDKCONT(L).LRNVI)APPEL INTRDI(CONT(L-1)»LRNV1-1)APPEL RCELL(L)RETOURFIN

C

C

FONCTION MADGCH(A)DONNE L'ADRESSE DE LA CELLULE A GAUCHEMADGCH»LSG(CONT<A))SI C'EST UNE TETE DE LISTE DONNE LE NOMSI(ID(CONT(MADGCH)>-2)1.2 » 1APPEL INSDIR t 0.MADGCH.MADGCH,MADGCH)RETOURFIN

FONCTION MADNQU(P»N)DONNE L'ADRESSE DE LA NIEME CELLULE A PARTIR DE LA QUEUEL»LOCT(P)FAIRE 1 1-1.NL-LSGCCONTCD)SI(ID(CONT(L))-2)2.3,2APPEL INSDIR(0»L.L,L>MADNQU-LRETOURFIN

CC

FONCTION LRNVT(LCH)LVLRVT FAIT REMONTER LE SUIVEURPREND COMME VALEUR LCHLRNVT=LCH

1 SKLCNVCH(LCH) )2»3»23 RETOUR2 L=LSD(CONT(LRNVT) )

APPEL INTRDKCONT(LJ.LRNVT)APPEL INTRDI(CONT(L-1)*LRNVT-1)APPEL RCELHL)ALLER A 1FIN

A LA LISTE PRINCIPALE

Page 78: SLIP: Langage de listes symétrique Applications

FONCTION MTLIST(P) FONCTION NUCELL(X) ÈCOMMUN CREF C DONNE UNE NOUVELLE CELLULE EXTRAITE DE L1* RESERVEM«LOCT(P) COMMUN CREFSnLISTMTfP))3,4,3 M=LSD(CREF)

3 LD-LSD(CONT(MM C SI LA RESERVE EST EPUISEE MESSAGE ET ARRETLG«LSG(CONT<M)) SI(M)lt2.1APPEL INSIND(-l.MiM.M) 2 IMPRIMER 901APPEL INSIND(-1»-1,LD»LSG(CREFM APPEL EXITAPPEL INSDIR»-1,LG,-1»CREF) C SI LA CELLULE APPELEE ETAIT ANCIENNEMENT UN EMBRANCHEMENTAPPEL INSIND(-1»-1,O.LSG(CREF)) C RENVOI DE LA SOUS LISTE ACCROCHEE EN RESERVE

4 MTLIST-M 1 SI<ID<CONT(M))-l)3,4,3RETOUR ** APPEL IEFLST (CONT JM-1 ) )FIN 3 APPEL INSDIR(-1,-1,LSD(CONT(M))tCREF)

APPEL INTRDI(0»M)APPEL INTRDI(0*M-1)

C PREND COMME VALEUR SON ADRESSENUCELL=M

FONCTION MADNTT(PtN) RETOURDONNE L'ADRESSE DE LA NIEME CELUULE A PARTIR DE LA TETE 901 MODELEC1H1.59HLISTE DES CELLULES DISPONIBLES EPUISEE - PROGRAMME TL»LOCT(P) 1TERMINE )FAIRE 1 1=1,N FIN

1 L«LSD<CONT(L))SMIO<CONT(L))-2)2.3*2

3 APPEL lNSDIR(0»L»LtL)2 MADNTT-L

RETOURFIN

FONCTION LINDCH(K)LINDCH«LSG(CONï(K))RETOURFIN

FONCTION NAMTST(K)SI(LSG<K)-LSD(K))1.4.1

4 SI(ID(CONT(Kn-2)1.2»l2 SI(CONT(LSD<CONT(LSG(CONT(K) ) ) M-CONTOO ) 1.3*13 NAMTST-0

RETOUR1 NAMTST—1RETOURFIN

FONCTION NULSTD(A.L) FONCTION NVTTCP.Q)C NULSTR ECOURTE LA LISTE L DE SES CELLULES A DROITE DE A C ACCROCHAGE DiUNE NOUVELLE CELLULE EN TETE DE LA LISTE 0

NULSTD-LISTE<9> C PREND COMME VALEUR L'ADRESSE DE LA NOUVELLE CELLULEC PREND COMME VALEUR LE NOM DE LA LISTE CREEE C P EST LA DONNEE DE CETTE CELLULEC CREE UNE LISTE ET LUI ACCROCHE LES CELLULES ENLEVEES A L C SI P EST UN NOM DE LISTE ACCROCHAGE DE SOUS LISTE P

SIUD«CONT<A))-2)1.2.1 NVTT-IMMDRT (P.LOCT(O) )2 APPEL INSIND(2.NULSTD»NULSTD.NULSTD) RETOUR

RETOUR FIN1 LOU*LSG(CONT(L) )

LPRE«LSG<CONT(AJ »APPEL lNSlND(-ltLPREi-l»L)APPEL INSlND(-l.-ltL.LPRE)APPEL INSIND(2»LQU.A»NULSTD) FONCTION NVQU(P»Q)APPEL INSIND(-l.NULSTD.-l.A) NVQU«IMMGCH(P.LOCT(Q))APPEL INSINDC-l.-l.NULSTDiLQU) RETOURRETOUR FINFIN

VJ1

FONCTION NULSTG(A.L)C NULSTL ECOURTE LA LISTE DE TOUTES GES CELLULES A GAUCHE DE A

NULSTG-LISTE(9)C CREE UNE LISTE ET LUI ACCROCHE LES CELLULES ENLEVEES A LC PREND COMME VALEUR LE NOM DE LA LISTE CREEE

SI(ID(CONT(AJ)-2)lt2»l2 APPEL INSIND(2»NULSTGtNULSTG»NULSTG>

RETOUR1 LTT»LSD(CONT(L) )

LSUC-LSD(CONT(A))APPEL iNSlND(-lt-ltLSUC.L)APPEL INSIND(-1.L*-1*LSUOAPPEL rNSIND(2»AtLTT.NULSTG)APPEL INSlNDC-l.-l.NULSTGfA»APPEL INSINDt-l.NULSTGt-l.LTT)RETOURFIN

Page 79: SLIP: Langage de listes symétrique Applications

C

1

A 17

MISE KESERirS ET RECUPERATION DES INDEX

ET DES MEMOIRES AUXILIAIRES

FONCTION RESTR8(AMG)RECUPERATION D'UN PARAMETRE DANi LA PILE N U 8DIMENSION X(IOO)

COMMUN CREF,XAMG=EJTT(X(8))RETOURFIN

FONCTION PARMT8(MG)MISE EN RESERVE D«UN PARAMETRE DANS LA PILE NODIMENSION X(100)COMMUN CREF»XAPPEL NVTT(MG»X(8))RETOURFIN

FONCTION PARMT4(MG»N»NltST)MISE EN RESERVE DE 4 PARAMETRES DANS 4 PILEbDIMENSION X(100)COMMUN CREF»XAPPEL NVTT(MG»X(1))APPEL NVTT(N,X(2))APPEL NVTT(N1,X(3))APPEL NVTT(ST,X(4))IMPRIMER 1 » M G » N » N 1 » S TMODELE(5X»4(5X,012))RETOURFIN

FONCTI ON REST R4(AMG » AN » AN 1,ST)RECUPERATION DU SOMMET DE LA PILE DE 4 BLOCSDIMENSION X(100)

COMMUN CREF»XAMG=EJTT(Xri))AN=FJTT(X(2))AN1=EJTT(X(3))ST=EJTT(X(4))LES 4 PILES REMONTENT D'UN CRANIMPRIMER l»AMG»AN»ANliSTMODELE(4(4X,012))RETOURFIN

Page 80: SLIP: Langage de listes symétrique Applications

FONCTION REELU)PREND POUR VALEURREEL-ZRETOURFIN

Z . EST UTILISEE POUR LES CHANGEMENTS DE MODEFONCTION NAMEDL(L)PREND POUR VALEOR LE NOM DE LA LISTE DE PROPRIETE DE LA LISTE LNAMEDL.LSG(LOCTtL)-l)RETOURFIN

900901

CC

FONCTION INTGER(I)PREND POUR VALEUR IINTGER-IRETOURFIN

EST UTILISEE POUR LES CHANGEMENTS DE MODE

SOUS PROGRAMME DERRORILSTIIMPRIMER 900, LSTIMPRIMER 901RETOURMODELE<1H1.20X.05)MODELEI20X.44HLISTE D'ATTRIBUT ET DE VALEUR DEMANDESMAIS.. I

FIN

FONCTION SCHATR(AT«L)RECHERCHE UN ATTRIBUT PAR LA DROITEPREND POUR VALEUR LE NOM DE LA SOUS LISTE OUI A AT POUR ATTRIBUTLR-LCRTCHCLJSCHATR.REELCLISI(ITSVAL(AT,SCHATR))li2ilSCHATR-AVSND(LR*K>

SCHATR-0.J-IEFCH(LR)RETOURFIN

FONCTION ITSVAL(AT.LST)C RECHERCHE L'ATTRIBUT AT SUR LA LISTE DE PROPRIETES DE LA LISTE LST

SI(LSG<CGNT(LST-1I))3t4,3C SI PAS DE SYMBOLE AT ITSVAL-03 M-MADATR(AT.LST)

SKM+ltl.2,1C PREND POUR VALEUR LA VALEUR DE CET ATTRIBUT1 ITSVAL-INHALT(LSD(CONT(M))-1)

RETOURC SI PAS DE LISTE DE PROPRIETE MESSAGE D'ERREUR ET ITSVAL-04 APPEL DERROR(LST)2 ITSVAL-0

RETOURFIN

FONCTION MAKEDL(L«M)C L DEVIENT LA LISTE DESCRIPTIVE DE M

APPEL MTDLST(M)C PREND COMME VALEUR M

MAKEDL-MC S'IL Y AVAIT DEJA UNE LISTE DESCRIPTIVE,ELLE EST EFFACEEC ET REMPLACEE PAR L

N«LOCTIM)K-LOCT(L)APPEL INSINDC-l.K.-l.N-l)APPEL INS!ND(-l«-l«LCNVCH(L)+lt9-l.RETOURFIN

C/2

802

g

it-CD

cc

3

2

1

C

C

C2

C

C

C2

FONCTION MRKLSS(MtLST)MARQUE LA LISTE PRINCIPALE ET TOUTES LES SOUS LISTES DE MPREND POUR VALEUR LE NOM DE LA LISTE LSTMRKLSS-LSTLR-LCNVCHC MRKLST (M, LST )XX«AVSNDCLRtK)

APPEL INSINDeM,-lt-l.LSD<XX)-l)ALLER A 3APPEL RCELULR»RETOUR

FIN

FONCTION NEWVAL(AT»VAL,LST>CHANGE LA VALEUR DE L'ATTRIBUT AT MET VAL AU LIEU DE LA PRECEDENTE

SÎMPAS DtATTRIBUT OU PAS DE L. DE P. ON EN CREE UNE AVEC AT ET VALSI(M+l)lt2tlPREND POUR VALEUR L«ANCIENNE VALEURNEWV*L«INTGER C SUBST t VAL,LSD« CONTIM)))»RETOURAPPEL LDATVLCATtVAL.LST)NEWVAL-0RETOURFIN

FONCTION NOATVL(AT»LST)RENVOIE L'ATTRIBUT AT ET SA CELLULE DE VALEUR E.N RESERVEM-MADATRCAT.LST)SI PAS DE L. DE P. OU PAS DE AT NOATVL-0

PREND POUR VALEUR LA VALEUR DE CET ATTRIBUTNOATVL-INTGERCELIMCLSDICONTCM) ) ) )APPEL ELIM(M)RETOURNOATVL-0RETOURFIN

FONCTION LDATVL(AT»VL»LST)SI(LSG(CONT(LST-1»)»1»2,1

S S'IL N'Y A PAS DE L DE P0 EN CREE UNE ET LOGE EN TETE AT PUIS VL2 LDATVL«LISTAV(LST)C S'IL Y A UNE LISTE DE PROPRIETES LOGE EN TWTE AT ET ENSUITE VL1 APPEL IMMDRT(VLtIMHGCH(AT.LSG<CONTCLST-im)

RETOURFIN

FONCTION LISTAVILSTJC CREE UNE LISTE DE PROPRIETES DE LA LISTE LST

LISTAV«LISTE(9)C PREND POUR VALEUR L'ADRESSE DE CETTE LISTE VIDE

APPEL INSIND(-1»LSD(LISTAV1,-1»LST-1)RETOURFIN

FONCTION MADATRtAT.LSTILSTDES«LSG<CONT<LST-1»)

C S'IL N'Y A PAS DE L. DE P. A LA LISTE LSTtMADATR—»1SI(LSTDES)1,4,1

C MADATR.ADRESSE DE LA CELLULE QUI CONTIENT AT1 MADATR.LSD(CONTILSTDES)»C SI LA L. DE P. EST VIDE MADATR«-18 SI(ID<CONT(MADATR))-2)3»*t33 SIJEGAL(CONT«MADATR-l)tAT)5*6t55 M«LSD(CONTtMADATR»

SI(ID(CONT(MS)-2)7,4»77 MADATR-LSD(CONT<MJ)

ALLER A 8* MADATR—16 RETOUR

FIN

Page 81: SLIP: Langage de listes symétrique Applications

A 20

1C

IDENTIFICATIONFONCTION MTDLSKLST )PREND POUR VALEUR LSTMTDLST=LSTK = LSG ( CON T( LOCK LST )-SI (K) 1»2,1APPEL INSDIR(0,K,K,K)RENVOIE EN RESERVE LAAPPEL MTLIST(X)RETOURFIN

LISTE DE PROPRIETE CELLE CI DEVIENT VIDE

FONCTION IRADLS(L)EFFACE LA LISTE DE PROPRIETE DE L ET REMETLA=LOCKL)+1J= IEFLSKNAMEDL(L ) )APPEL INSIND(-1»0»-1,LA)RETOURFIN

LE POINTEUR A 0

FONCTION LSTMRKILST)PREND POUR VALEUR LA MARQUE DE LA LISTE LST

LSTMRK=ID(CONT<LOCKLST)-l))RETOURFIN

CC

FONCTION MRKLSKMjLST )MARQUE LA LISTE LST DE MPREND POUR VALEUR LSTMRKLST=LSTAPPEL I NS I ND < M »-!»-!» LOCK LST )-l )RETOURFIN