Informatique T4 - Page des travaux pratiques - Environnement de développement - Syntaxe de Oz |
L'objectif de cette séance est de se familiariser avec
Démarrez l' interface de Mozart.
Consultez ce lien pour utiliser au mieux les commandes d'édition et de compilation.
Voici quelques exercices pour vous familiariser à l'environnement et au langage.
Editer et compiler. Tapez le programme suivant.
{Browse 1} {Browse 2} {Browse 3} {Browse 4}Ce programme appelle quatre fois la procédure
Browse
.
Cette procédure affiche la valeur qui est donnée en argument.
Expressions arithmétiques.
Nous pouvons utiliser la procédure Browse
pour évaluer des
expressions arithmétiques. Par exemple:
{Browse (1+5)*(9-2)}Calculez
Attention: l'opérateur de négation se note ``~
''.
Variables.
L'instruction declare
permet de créer une variable
et de lui assigner une valeur. Comme dans l'exercice précédent, la
valeur peut être donnée par une expression. Par exemple:
declare X=(6+5)*(9-7)On peut alors utiliser l'identificateur de la variable comme synonyme de la valeur. Par exemple:
{Browse X} {Browse X+5}Réeffectuez les calculs de l'exercice précédent, en utilisant des variables là où vous le jugez utile.
Déclarations multiples. Considérez le programme suivant:
declare X=42 Z=~3 {Browse X} % (1) {Browse Z} declare Y=X+5 {Browse Y} % (2) declare X=1234567890 {Browse X} % (3)Ce qui se trouve après le signe
%
est ignoré par le compilateur. Cela permet de commenter le programme.
X
est-il toujours accessible ? A votre avis, sa valeur est-elle
toujours en mémoire ? Qu'en est-il de Z
?(1)
.
Quel X
est affiché ? Où s'est fait le lien entre le
X
et cette valeur ?(2)
. La
valeur de Y
a-t-elle été affectée par la seconde
déclaration de X
? Pourquoi ?Expressions booléennes.
Outre les expressions arithmétiques, Oz propose des expressions
booléennes. Les deux valeurs possibles de telles expressions sont
true
et false
.
Ainsi, la comparaison de deux valeurs entières renvoie un booléen.
{Browse 3 == 7} % egaux {Browse 3 \= 7} % differents {Browse 3 < 7} % plus petit {Browse 3 =< 7} % plus petit ou egal {Browse 3 > 7} % plus grand {Browse 3 >= 7} % plus grand ou egalFaites quelques tests et observez les valeurs booléennes renvoyées.
Fonctions et expressions. Nous pouvons aussi utiliser des appels de fonctions dans les expressions arithmétiques et booléennes. Voici un exemple:
{Browse {Max 3 7}} {Browse {Not 3==7}}La fonction
Max
prend deux arguments et renvoie le maximum
de ceux-ci. La fonction Not
prend un argument booléen et
renvoie sa négation. Notez que les arguments des fonctions sont aussi
des expressions arithmétiques ou booléennes.
Utilisez la fonction Max
dans une expression qui renvoie
le maximum entre trois nombres X
, Y
et
Z
. Essayer avec X=7
, Y=5
,
Z=6
. Essayer également avec d'autres valeurs.
Dans le programme suivant, la sous-expression {SlowAdd 1000
1}
est calculée trois fois. La fonction SlowAdd
est implémentée pour calculer une somme en au moins une seconde (1000
millisecondes). Transformez l'expression dans l'appel à
Browse
pour n'appeler SlowAdd
qu'une seule
fois.
Pensez à introduire une variable avec
local...in...end
.
declare fun {SlowAdd X Y} {Delay 1000} X+Y end {Browse {SlowAdd 1000 1}+{SlowAdd 1000 1}+{SlowAdd 1000 1}}
Construisez une fonction qui renvoie le signe d'un entier
N
passé en argument. Les valeurs possibles du signe sont
0
, 1
et ~1
suivant que
N
est nul, positif ou négatif.
Testez votre fonction pour différentes valeurs de N
.
Portée lexicale et environnement. Pour rappel, la portée d'une déclaration est la zone d'un programme où un identificateur est défini et correspond à cette déclaration. L'environnement à un moment donné de l'exécution est l'ensemble des identificateurs définis et leur variable correspondante en mémoire.
Dans le programme suivant, quelle est la portée de chacun des identificateurs déclarés ? Ou, de manière duale, à quelle déclaration se rapporte chaque occurrence d'identificateur ?
local P Q X Y Z in % (1) fun {P X} X*Y+Z % (2) end fun {Q Y} X*Y+Z % (3) end X=1 Y=2 Z=3 {Browse {Q {P 4}}} end
En utilisant les informations précédentes, prédisez le résultat de l'exécution du programme. Si cela s'avère nécessaire, exécutez le programme à la main, en notant les instructions effectivement exécutées et leur environnement.
Modifiez le code pour que l'identificateur Y
à la ligne
(2)
corresponde à la variable dénotée par X
à la ligne
(1)
,
et aie donc la valeur 1
.
Vérifiez que le programme modifié affiche 10
.
Faites de même pour que l'identificateur Z
à la ligne
(3)
corresponde à la variable dénotée par Y
à la ligne
(1)
,
et aie donc la valeur 2
.
Vérifiez que le programme modifié affiche 9
.
L'abstraction procédurale. Dans cet exercice, vous allez explorer les possibilités des fonctions, afin d'en améliorer votre compréhension. Considérez le programme suivant.
declare X=3 {Browse X+2} % (1) {Browse X*2} % (2)
Construisez une fonction Add2
sans argument, à partir de
l'expression X+2
à la ligne
(1)
.
Ensuite, remplacez l'expression de la ligne
(1)
par un appel à la fonction
Add2
.
Construisez maintenant une fonction Mul2
à partir de
l'expression X*2
de la ligne
(2)
.
Cette fonction prendra X
en paramètre.
Comme dans le point précédent, remplacez l'expression de la ligne
(2)
par un appel à la fonction
Mul2
.
Décrivez les fonctions Add2
et Mul2
.
Quels est leur environnement contextuel, c'est-à-dire leurs
identificateurs libres et leur valeur ?
Déclarez à nouveau l'identificateur X
par l'instruction
ci-dessous, sans redéfinir les procédures Add2
et Mul2
.
declare X=4Que se passe-t-il si l'on appelle maintenant les fonctions
Add2
et Mul2
?
Le fichier seance1.oz contient des exemples de code Oz. Compilez et exécutez quelques-uns de ces exemples.
Calculez l'expressions suivante en utilisant des variables de manière adéquate (Indication: pensez à 27 = 2*2*2*2*2*2*2).
27 * 3 + 242 - 2100 * 5
La fonction Sqrt
renvoie la racine carrée du nombre réel
passé en argument. Utilisez-la pour construire une fonction
Distance
qui calcule la distance entre deux points d'un
plan. Cette fonction prend quatre nombres réels en arguments.
local X1=3. Y1=2. X2=2.5 Y2=0. in {Browse {Distance X1 Y1 X2 Y2}} end
Construisez une fonction Egal
qui prend deux arguments
et renvoie true
s'ils sont égaux,
false
sinon.
Voici un petit exercice qui ne vous prendra que quelques minutes ! Il vous permet de tester si vous maîtrisez les bases de la syntaxe du langage Oz. C'est un premier pas vers la bonne compréhension du cours.
Remplissez le formulaire avec vos réponses, ensuite sélectionnez votre tuteur dans la liste. Un e-mail est composé automatiquement, il vous suffit de l'envoyer.