Vous êtes sur la page 1sur 12

Informatique

[FSAB 1402]
Pierre Bouilliez

Dfinitions

Expression : est une squence doprations qui renvoie une valeur.


Instruction : est une squence dopration qui ne renvoie pas de valeur.
Encapsulation : le fait de rendre une partie de code impossible daccs par lextrieur de la
partie en question.
Identificateur : une chaine de caractres dans le code source dun programme qui fait rfrence
pendant lexcution une variable en mmoire.
Environnement : E est lensemble des correspondances entre des identificateurs et des entits
en mmoire . Nous crivons E : {X > x, Y > y} o x et y rfrencient des valeurs
dans . Ca peut tre vu comme une fonction qui prend un identificateur < x > et renvoie
une entit en mmoire X. E(< x >) = X. Il y a 2 oprations sur les environnements :
ladjonction et la restriction.
Ladjonction : dfinit un nouvel environnement en ajoutant une paire un environnement
existant. E + {< x > > X}
La restriction : dfinit un nouvel environnement dont le domaine est un sous ensemble du
domaine dun environnement existant. Le nouvel environnement E 0 est dfini par lintersection de lenvironnement E avec une srie didentificateur {< x1 >, . . . , < x2 >}.
Le calcul rcursif : technique de programmation consistant crer une fonction qui sappelle
elle-mme avec des arguments diffrents. La fonction peut sappeler plusieurs fois et
nimporte quel endroit de son code.
Le calcul itratif ou rcursion terminale : obtenue par loptimisation terminale, cest une
rcursion qui na quun seul appel rcursif et celui-ci se trouve en tout dernier lieu dans
la procdure. La consquence rside dans le fait que lors de lexcution de la machine
abstraite, la taille de la pile reste constante.
Une abstraction de donnes : est une manire abstraite dutiliser des donnes, cest dire
que nous pouvons utiliser les donnes sans dpendre dune implmentation particulire.
Une abstraction de donnes se compose dun ensemble dinstances qui peuvent tre utilises
selon un jeu de rgle que nous appelons sont interface.
scurise : si le langage fait respecter son encapsulation.
non agrge : si elle dfinit 2 sortes dentit : les valeurs et les oprations. Les valeurs
sont passes comme argument aux oprations et sont renvoyes comme rsultat. Une
abstraction de donnes non agrge est gnralement un type abstrat de deonnes ou
ADT.
agrge : si elle dfinit une seul sorte dentit, les agrgat ou objet, qui combine les
notions de valeur et dopration.
avec tat : si elle utilise ltat explicite (voir p.116). Si non, elle est sans tat.

complte : sont tous les concepts qui permettent une classe de dfinir une abstraction
de donnes par elle-mme. Il y a 2 sous-groupes : les membres de la classe (mthodes,
attributs et proprits), et les concepts qui exploitent le typage.
incrmentales : sont tous les concept relatifs lhritage.
Lhritage : est un concept qui permet de construire une abstraction de donnes de faon
incrmentale, comme une extension ou une modification dune autre abstraction de donne.
Cela rduit le problme de duplication de code et clarifie les relations entre abstraction de
donnes. Seul les diffrences entre labstraction de donnes et ses anctres doit tre dcrit.
Abstraction fonctionnelle : utilisation de fonctions existantes pour construire de nouvelles
fonctions.
Dveloppement descendant : mthodologie qui consiste dabord crire la fonction principale et ensuite la complter avec dautres fonctions.
Smantique du langage : cest un modle mathmatique simple des oprations du langage
de programmation qui dfinit ce quelles font lors de lexcution de celui-ci.
Spcifiaction du programme : cest une dfinition mathmatique des entres dont le programme a besoin et des rsultats quil calcule. Nous devons dfinir ce que nous voulons
que le programme fasse.
Complexit temporelle : cest le temps dexcution dun programme en fonction de la taille
de lentre, un facteur constant prs.
Complexit amortie : est un principe utilis lorsquon connait la complexit dun ensemble
doprations. Si la complexit de lensemble de n oprations est O(f (n)), alors on dit que
la complexit amortie dune opration est O(f (n)/n).
Programmation dordre suprieur : le fait de passer des fonctions en argument dautres
fonctions. Fait de crer des fonction tout moment et de les utiliser comme des valeurs.
Concurrence : permet plusieurs activits de sexcuter simultanment. Les activits peuvent
communiquer et synchroniser.
Communiquer : linformation passe dune activit une autre.
Synchroniser : une activit attend une autre.
Concurrence cooprative : est une excution dans laquelle les entits travaillent ensemble
pour arriver un mme rsultat.
Concurrence comptitive : est une excution dans laquelle chaque entit un but local
indpendant des autres. La concurrence comptitive est normalement gre par le systme
dexploitation par un concept qui sappelle un processus.
Dataflow : fait quune opration qui comporte des variables non lies attende que celles-ci
soient lies pour sexcuter.
Variable dataflow : variable dclarative qui attend dtre lie avant dtre utilise.
Etat explicite : squence de valeurs calcules progressivement. Fonction qui volue dans le
temps, ayant une mmoire interne qui laide faire son travail. Par exemple par lutilisation
de cellules.
Objet : fonction avec une mmoire interne. (plus de dtail df pp.126-127)
Classe : fonction qui est dfinie selon certaines proprits et peut sinstancier linfini. Une
classe peut tre obtenue par lhritage en la dfinissant de manire incrmentale au moyen
dabstraction de donnes. (plus de dtail df pp.126-127)
Programmation base objet : programmation avec des classes et des objets.
Programmation oriente objet : programmation base objet + le concept dhritage.
2

Non dterminisme : proprit dun programme qui peut donner des rsultats diffrents pour
2 xcutions avec les mmes paramtres. Cela arrive par exemple lorsquon utilise la concurrence et ltat explicite en mme temps.
Programmation dclarative (sans tat) : se base sur le modle dclaratif.
Capacit objet : est une rfrence infalsifiable un objet. Cela peut tre obtenu par lutilisation de noms. Donne une scurit en profondeur.
Langage pratique : est un langage concu pour solutionner des problmes dans le monde rel.
Grammaire : est un ensemble de rgles qui dfinit comment construire des "phrases" partir
de "mots". En informatique : comment construire des instructions partir de jetons.
Jetons : squences de caractres.
Analyseur de jetons (ou analyseur lexical) : programme qui prend une squence de caractres et renvoi une squence de jetons.
Parseur : programme qui prend une squence de jetons et renvoie un arbre syntaxique qui
reprsente une instruction.
Symbole terminal : un jeton.
Symbole non terminal : squence de jetons.
Langage formel : ensemble de mots. Par exemple : lensemble de toutes les instructions gnres par une grammaire et un symbole non terminal font un langage formel.
Langage noyau : Langage simple dans lequel toute opration du langage peut tre traduite. Il
est le langage par lequel tout programme va tre execut aprs avoir t traduit. Il permet
de vrifier manuellement le fonctionnement dun programme par la methode de la machine
abstraite. Il peut tre tendu par les sucres syntaxiques et les abstractions linguistiques
pour obtenir le langage usuel. La syntaxe du langage noyau est un sous ensemble de la
syntaxe du langage complet.
Les abstractions linguistiques : sont des extensions au langage noyau : elles sont dfinies
par des instructions du langage noyau et utilisent un mot clef pour tre appeles. Cest
une partie de code en langage noyau cach sous un mot clef. Par exemple la fonction est
une abstraction linguistique, son mot clef est le mot fun.
Sucre syntaxique : est une expression raccourcie pour certaines expressions idiomatiques (une
courte squence dinstruction souvent utilise).
Machine abstraite : Construction mathmatique modlisant lexcution dun programme.
Mmoire affectation unique : ensemble de variables initialement non lies et dont chacune peut tre lie une valeur (et une seul fois !).
Dfrence : opration invisible par le programmeur consistant suivre les liens des variables
lies pour obtenir leur valeur. (se passe dans la mmoire)
Valeur partielle : structure de donne qui peut contenir des variables non lies. Par exemple
un enregistrment dont un des champs nest pas encore li.
Type de donnes : est un ensemble de valeurs avec un ensemble doprations sur ces valeurs.
Dans le modle dclaratif, il existe les types de base ou primitifs (nombres, enregistrements,
boolens, chiffres(entier et flotant) tuple, liste, chaine et les procdures. Liste complte
p.51) et les types que les programmes peuvent dfinir (les types de donnes abstraits
ADT).
ADT : les types de donnes sont abstraits (ADT) sils sont compltement dfinis par lensemble
de leurs oprations, indpendamment de son implmentation.
3

Typage statique : le type de toutes les variables est connu la compilation. Quelles soient
lies ou non. (ex : JAVA)
Typage dynamique : le type dune variable est connu lorsque celle-ci est lie. (ex : Oz)
La porte dun identificateur : est la portion du code dans lequel celui-ci rfrencie une
valeur en particulier. Elle peut tre controle par linstruction local...in...end. Dans
ce cas, la porte est dite lexicale ou statique puisquune simple inspection du code permet
de la mettre en vidence.
Porte statique : La variable qui correspond une occurence dun identificateur est celle
dfinie dans la dclaration qui contient loccurence et qui est la plus proche de loccurence
dans le texte du programme.
Porte dynamique : La variable qui correspond loccurence dun identificateur est celle
dfinie dans la dclaration qui contient loccurence et qui est la plus rcente pendant
lxecution qui mne jusqu linstruction qui contient loccurence.
Le passage par rfrence : est un procd par lequel une variable est lie une valeur ellemme rfrencie par une deuxime variable, dans une procdure.
Identificateur libre : identificateur non li une variable.
Abstraction procdurale : cration dune procdure en plaant une instruction dans une
dclaration de procdure.
Arguments formels : arguments dune procdure qui seront re-dfinis chaque fois que la
procdure est appele.
Arguments non-formels : arguments qui sont dclars une fois pour toute lors de la dclaration de la mthode et ne changeront jamais de valeur.
Valeur procdurale : le code de la procdure + lenvironnement qui y est associ. Une paire
(proc...end, CE) o CE est lenvironnement contextuel dfini par E {< z1 >, < z2 >
, ..., < zn >} o E est lenvironnement lors de lappel de la procdure et les < zn > sont
les arguments non formels de la procdure.
Instruction smantique : est une paire (< S >, E) o < S > est une instruction et E est
un environnement. Linstruction smantique montre la relation entre une instruction et ce
quelle reprsente en mmoire.
Etat dexcution : est une paire (ST, ) o ST est une pile dinstructions smantiques et
est une mmoire affectation unique.
Un calcul : est une squence dtats dexcution qui commence par un tat initial : (ST 0, 0) >
(ST 1, 1) > (ST 2, 2) > ...
Pas dexcution : transition qui sopre entre chaque tat dexcution dun calcul.
Mmoire active : un moment dune excution, correspond la pile smantique + la mmoire
accessible par la pile smantique.
Mmoire centrale : contient une squence de mots. Cette squence de mots de 32 ou 64 bits
est partitionne en blocs o un bloc est une squence dun ou plusieurs mots.
Ramassage de miette : est un processus par lequel le systme rcupre la mmoire (sous
forme de bloc) qui nest plus utilise pour la librer en vue de lutiliser une autre tche
ultrieurement. Il est gnralement assur par le systme dexploitation et est emprunt
deux types derreurs de manipulation : le pointeur dtach 1 et la fuite de mmoire 2 .
Mozart a un ramasse miette de type local.(p.80 livre)
1. cette erreur arrive quand un bloc est rcupr bien quil soit toujours accessible, et donc utilis.
2. se produit lorsquun bloc nest pas rcupr bien quil ne soit plus utilis.

Balise dinsertion $ : change toute instruction en une expression. Exemple : linstruction


{P X1 X2 X3} peut tre crite {P X1 $ X3} qui est une expression.
Interface interactive : permet lintroduction de fragement de programme et leur xecution
immdiate. Une instruction interactive peut tre tout instruction lgale ou lexpression
Declare. ex : Mozart a une interface interactive.
Un fil : est une squence dinstruction qui sexcute indpendament du reste du code. Cela est
rendu possible grce linstruction thread...end.
Programmation concurrente : programmation avec des fils.
Le gestionnaire dexception : est la partie du programme o est transfre lexecution lors
de la dtection dune erreur. Une indication sur le type derreur lui est aussi transfre.
Celui-ci va empcher que lerreur se rpande dans lentieret du code en sortant du contexte
courant et en levant une exception. Cest le principe dendiguement derreur.
Une substitution : est une modification la machine abstraite pour faciliter son utilisation
manuelle. Le principe est de remplacer les identificateurs dans les instructions par les
entits en mmoire correspondantes. La machine abstraite alors obtenue na pas denvironnement. Cette machine abstraite nest pas fidle limplmentation sur un ordinateur
mais permet dexcuter une pile smantique manuellement plus facilement.
Un Accumulateur : est un tat quune fonction dclarative itrative va utiliser durant son
execution. Celui-ci est modifi avant chaque rappel de la fonction. Dans le langage noyau,
il est reprsent en ajoutant une paire S1 et Sn la procdure proc{P X S1 ?Sn} o S1
est ltat dorigine et Sn ltat final.
Programmation par accumulateur : technique de programmation qui enfile un tat dans
les appels de procdures embriqus.
Recherche binaire : algorithme de recherche dans un arbre binaire ordon qui permet de
supprimer la moitier des possibilits chaque pas. (p.138 livre)
Une valeur de nom : est une sorte de clef qui est cre pour protger laccs une partie de
programme. Les noms nont pas de reprsentation textuelle, la seule manire de connaitre
un nom est que quelquun passe une rfrence au nom lintrieur du programme. Le type
nom a deux oprations. (p.145 livre)
Un type abstrait scuris : est un ADT dont laccs t protg par un nom. Pour acceder
lADT, il faut avoir une rfrence son nom et utiliser les oprations Wrap et Unwrap.
Mmoisation : le fait de garder en mmoire les rsutats des anciens calculs pour ne plus devoir
le refaire.
Le modle concurrent dataflow ou modle dclaratif concurrent : est le modle dclaratif tendu de lutilisation de fils par linstruction thread...end.
Le modle concurrent parresseux : est le modle dclaratif concurrent etendu de la synchronisation et de linstruction {WaitNeeded X} qui va excuter le code qui la suit que si
le code a besoin de la valeur de la variable X. De la sorte, on va pouvoir crire des fonctions
dites paresseuses qui ne sexcuteront que si on a besoin de leur rsultat. Labstraction
linguistique est fun lazy.
Lordre causal : est le schma de fils qui reprsente les possibilit dordre dexecution de
chaque pas.
Lordre total : est le fait que dans toutes les possibilits dexecution, les pas sont dans le mme
ordre. (ex : execution avec un seul fil).
Lordre partiel : est obtenu lorsque lexcution du programme peut donner un ordre de pas
diffrent dune execution lautre. (ex : execution avec plusieurs fils).
5

Lordonnanceur : est la partie du systme qui pour chaque tat choisit le fil qui doit tre
xecut. Celui-ci utilise un ensemble de rgles prcises qui sappelle lalgorithme dordonnancement.
La premption : est larrt forc dun fil qui sexcute.
Un flot : (stream) est une liste potentiellement illimite dont la queue est une variable dataflow
non lie. Un flot est cr incrmentalement en liant la queue un autre flot.
Un producteur : est le fil qui cre le flot.
Les consommateurs : sont les fils qui lisent le flot. Comme la queue est une variable dataflow,
les consomateurs liront le flot au fur et mesure de sa cration.
Un transformateur : est un fil qui lit le flot du producteur et cre un nouveau flot quil envoie
aux consomateurs.
Un pipeline : est une squence dobjets flots dont chacun alimente le suivant.
La modularit : dun programme face un changement dans une partie de son code est dite
leve sil peut tre fait sans changer le reste du programme. Ce ne sera pas ralisable dans
le modle dclaratif. Cest dailleurs une de ses principales limitations.
Un tat : est une squence de valeur dans le temps qui contient les rsultats intermdiaires
dun calcul souhait.
Letat implicite : est un tat qui nexiste que dans lesprit du programmeur, qui est invisible
pour le programme. Cela peut tre obtenu dans le modle dclarartif par exemple par
lutilisation dun accumulateur.
Ltat explicite : dans une procdure est un tat dont lexistence stend au dela dun appel
de la procdure sans tre prsent dans les arguments de la procdure. Cela ne peut tre
obtenu dans le modle dclaratif. Il faut tendre le modle avec le concept de cellule.
Chaque instance de ltat explicite est une paire de deux entits du langage. La premire
est lidentit de linstance et la seconde est son contenu actuel. Lorsquon modifie un tat,
aucune des deux entits nest change, seul la correspondance change.
Une cellule : est une entit qui a un nom, une dure de vie illimite et un contenu qui peut
tre chang. Elle est obtenue par linstruction C = {NewCell <val>}. @C donne accs
son contenu et C:= <val> met un nouveau contenu.
Le modle avec tat : est le modle dclaratif tendu de ltat explicite avec les cellules.
Spcification : une des deux parties de tout systme quelconque. Elle dfinit un contrat qui
dfinit comment le systme doit se comporter.
Limplmentation : est la deuxime partie de tout systme quelconque qui dfinit comment
le reste du monde interagit avec le systme. Elle est la construction du systme, vu de
lintrieur. La spcification est bien plus simple comprendre que limplmentation.
Une classe : est une dfinition incrmentale de composant. Cest une structure de donnes
qui dfinit ltat interne dun objet, son comportement et les classe dont il hrite. Une
classe peut donner lieu un nombre arbitraire dinstance. Dans Oz, une classe est un
enregistrement qui contient un ensemble de noms dattributs (sous forme dune liste) et
un ensemble de mthodes (sous forme dun enregistrement). (voir pp.276-278)
1
2
3
4
5
6

class Account
attr balance :0
meth transfer ( Amt )
balance := @balance + Amt
end
meth getBal ( Bal )

Bal = @balance
end
meth batchTransfer ( AmtList )
for A in AmtList do { self transfer ( A ) } end
end

7
8
9
10
11
12

end

Classe abstraite : classe dans laquelle certaines mthodes ne sont pas dfinies. Une classe qui
hrite de cette classe pourra les implmenter et faire compiler le code. Cest un genre
"dinterface".
Un objet : instance dune classe.
Heritage de classe : manire de construire de nouvelles classes partir des classes existantes.
Il dfinit les mthodes qui sont disponibles dans la nouvelle classe. Il y a 2 conditions pour
quil soit lgal :
1. il doit tre orient et acyclique.
Ex : class A from B ...end
class B from A...end est illgal.
2. Si on barre toutes les mthodes qui ont t redfinies, chaque mthode qui reste doit
avoir une tiquette unique et doit tre dfinie dans une seule classe de la hierarchie.
Diagramme de classe : arbre gnalogique sous forme de schma de lhritage dune classe.
Mmoire affectation multiple : (ou mmoire affectable) est la mmoire qui contient les
cellules. Celles-ci sont reprsentes par une paire x : y o x et y sont des variables dans la
mmoire affectation unique. x est toujours li un nom qui reprsente une cellule et y peut
tre nimporte quelle valeur partielle. Ltat dexcution est alors le triplet (M ST, , ).
Le partage ou aliasing : se produit lorsque deux identificateurs X et Y rfrencient la mme
cellule. Changer le contenu de lun changera le contenu de lautre. Ex :
1
2
3
4

X
Y
Y
%

= { NewCell 0}
= X
:= 10
@X vaut 10.

Egalit de structure : dfini 2 entits gales si elles ont la mme structure. Par exemple :
1
2
3

X = person ( age :25 name : george )


Y = person ( age :25 name : george )
X == Y
% renvoie true

Cest lgalit utilise pour le modle dclaratif.


Egalit didentit : dfini 2 entits gales si elles rfrencent la mme valeur. Dans ce cas,
changer la valeur de lune change la valeur de lautre. Ce concept didentit est utilis
pour les cellules. Exemples :
1
2
3
4

X = { NewCell 10}
Y = { NewCell 10}
X == Y
% renvoie false
@X == @Y
% renvoie true

Si on fait X=Y alors X==Y est true.


Porte dans le modle avec tat : partie du texte dans laquelle un membre est visible, cest-dire quon peut y accder simplement en mentionnant son nom.
Membre priv : est visible seulement dans lobjet lui mme, dans sa classe et ses super classes.
Membre publique : est visible dans tout le programme.
7

Exemples de codes

2.1

Enregistrements et oprations de base

Un enregistrement a une tiquette (un atome) et des champs, identifis par un trait (entier
ou atome) auquel correspond un champ qui peut tre une variable ou une valeur quelconque.
1
2
3
4

{ Browse
{ Browse
{ Browse
{ Browse

foo (1:45 foo :34) }


foo (1:45 foo :34) . foo } % accs aux champs
{ Arity foo (1:45 foo :34) }} % liste des traits
{ Label foo (1:45 foo :34) }} % tiquette

foo (1:45 foo :34)


34
[1 foo ]
foo

2.2

Procdures et oprations de base

Une procdure est une valeur en Oz.


1
2
3

P = proc { $ A B } % quivaut proc { P A B }


skip
end

4
5
6

{ Browse { IsProcedure P }}
{ Browse { ProcedureArity P }} % ( arit , c - - d . nombre d arguments )

2.3
2.3.1

Exceptions
Leve dexception

En rponse une situation anormale, un programme peut lever un exception. Ici, une fonction
value une expression arithmtique reprsente par un tuple et lve une exception si lopration
nest pas reconnue.
1
2
3
4
5
6
7
8
9
10
11

fun { Eval E }
if { IsNumber E } then
E
else
case E
of plus ( X Y ) then { Eval X }+{ Eval Y }
[] times ( X Y ) then { Eval X }*{ Eval Y }
else raise illFormedExpr ( E ) end
end
end
end

2.3.2

Traitement des inconsistances

Lorsque lon essaie de donner une nouvelle valeur une variable, une exception est automatiquement leve par le systme. Celle-ci peut tre attrape et traite.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

declare
X
local Y Z in
thread Y ={ OS . rand } mod 2 end
thread Z ={ OS . rand } mod 2 end
try
{ Wait Y }
{ Wait Z }
Y=Z
X=Y
catch failure (...) then
X =2
end
end
{ Browse X }

2.4

Insertion dun lment dans une liste

Pour insrer un lment dans une liste, il faut parcourir tous les lments qui le prcdent.
1
2
3
4
5
6
7
8
9

fun { Insert L I X }
if I ==0 then X | L
else
case L
of nil then [ X ]
[] H | T then H |{ Insert T I -1 X }
end
end
end

10
11

{ Browse { Insert [1 2 4 5] 2 3}} % affiche [1 2 3 4 5]

2.5

Pile abstraite protge (1re version)

Nous pouvons maintenant protger nos piles abstraites.


1
2
3
4
5
6
7
8
9

local Wrap Unwrap in


{ NewWrapper Wrap Unwrap }
fun { NewStack } { Wrap nil } end
fun { Push S E } { Wrap E |{ Unwrap S }} end
fun { Pop S E }
case { Unwrap S } of X | S1 then E = X { Wrap S1 } end
end
fun { IsEmpty S } { Unwrap S }== nil end
end

2.6

Notion de flot

Un flot est une liste dont la queue est une variable non-lie. Un flot peut tre tendu en liant
sa queue un autre flot.
1
2

declare Xs Xs2 in
Xs =0|1|2|3|4| Xs2

3
4
5

declare Xs3 in
Xs2 =5|6|7| Xs3

2.7
2.7.1

Les principales limitations de la programmation dclarative


Mmoisation

La mmoisation consiste retenir des rsultats prcdents de manire limiter les calculs. Il
nest pas possible de programmer ce concept en utilisant juste les concepts dclaratifs bien que
les fonctions qui en rsultent ont un rsultat tout fait dclaratif.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

declare
local
Cache ={ NewDictionary }
in
fun { Fact N }
fun { FactL N Acc }
if N ==1 then Acc
else
if { Dictionary . member Cache N } then Acc * Cache . N
else { FactL N -1 N * Acc }
end
end
end
R ={ FactL N 1}
in
Cache . N := R
R
end
end

20
21
22

{ Browse { Fact 25}}


{ Browse { Fact 27}}

2.7.2

Rassemblement de flots immdiat

Souvent lorsque plusieurs flots contiennent des commandes pour un mme service, il faut
pouvoir les fusionner en envoyant les commandes au service ds que possible peu importe le
flot sur lequel elles sont arrives. Ce comportement nest pas dclaratif car il introduit un nondterminisme observable.
1
2
3

declare
fun { MergeStream As Bs }
I ={ WaitTwo As Bs } in

10

if I ==1 then
case As
of A | Ar then A |{ MergeStream Ar Bs }
end
else
case Bs
of B | Br then B |{ MergeStream As Br }
end
end

4
5
6
7
8
9
10
11
12
13

end

14
15
16
17
18
19

Xs Ys
{ Browse thread { MergeStream 1|3|5|7|9| Xs 2|4|6| Ys } end }
{ Delay 1000}
Xs =11|13| _
Ys =8|10| _

2.8

Produit des lments dune liste

On peut en utilisant un tat facilement calculer le produit des lments dune liste.
1
2
3
4
5
6
7

fun { ListProd L }
R ={ NewCell 1} in
for E in L do
R := E * @R
end
@R
end

8
9

{ Browse { ListProd [1 2 3 4 5]}}

2.9

Retournement dune liste avec tat

On peut utiliser un tat pour crire la fonction Reverse qui renvoie la liste forme des lments
de la liste passe en argument mais dans lordre inverse.
1
2
3
4
5
6
7
8

fun { Reverse Xs }
C ={ NewCell nil }
in
for E in Xs do
C := E | @C
end
@C
end

9
10

{ Browse { Reverse [1 2 3 4]}}

2.10

Extension conservatrice

Une extension est sans danger si toutes les instances de cette classe peuvent tre utilises
dans tous les cas o une instance de la classe parent peut ltre.
11

1
2
3
4
5
6

class VerboseAccount from Account


meth verboseTransfer ( Amt )
{ self transfer ( Amt ) } % transfert etant dfinie dans la class Account
{ Browse Balance : # @balance }
end
end

Complments

3.0.1

Lecture de fichier

Un fichier peut tre lu en donnant simplement son nom (exprim comme chane de carcatres,
atome, ou chane de caractre virtuelle) la fonction File.readList. Cet exemple cre un fichier
foo.txt sur le bureau ou dans votre rpertoire utilisateur selon votre systme dexploitation.
1

L ={ File . readList " foo . txt " }

2
3

L ={ File . readList foo . txt }

4
5

L ={ File . readList foo # . # txt }

6
7

L ={ File . readList http :// www . mozart - oz . org / features . html }

3.0.2

Ecriture de fichier

Pour crire dans un fichier, on utilise les oprations suivantes. Cet exemple cre un fichier
foo.txt sur le bureau ou dans votre rpertoire utilisateur selon votre systme dexploitation.
1
2
3
4

{ File . writeOpen foo . txt }


{ File . write Cette phrase sera dans le fichier .\ n }
{ File . write " Les chanes sont acceptes aussi .\ n " }
{ File . writeClose }

12

Vous aimerez peut-être aussi