Les formes impératives
Références
Une référence est un objet correspondant à une adresse mémoire et donc l'indirection est faite automatiquement dans toute situation où une valeur est requise. L'adresse associée à une référence n'est pas directement manipulable en tant que telle (il n'existe pas d'opérations pour le programmeur sur les références)
- Un symbole est lié à une référence, correspondant à un atome ou une paire pointée
- L'évaluation d'un symbole renvoie une référence vers sa valeur
- La référence est utilisée partout où la valeur n'est pas requise
Passage d'arguments
Soit une fonction, soient ses paramètres formels. Soit l'application
\texttt{(f a_1 a_2 ... a_n)}
Soient les références vers les résultats des évaluations respectives des arguments
Lors de l'application, un environnement local est construit. Il est constitué des liaisons entre les paramètres formels de la fonction et les références des arguments de l'application
\texttt{((p_1.r_1)(p_2.r_2)...(p_n.r_n))}
Les références sont utilisées comme des valeurs à travers les symboles , les indirections étant effectuées automatiquement. Ainsi, il est impossible de modifier un paramètre car la modification reste locale à cet environnement.
L'affectation
La forme
-
La référence associée à l'identificateur est remplacée par la référence du résultat de l'évaluation de l'expression .
-
La valeur de retour de l'affectation est la valeur que la fonction n'affiche pas. La procédure rend ce même résultat en prenant un nombre quelconque d'arguments
Modification de paires pointées
On ne peut pas modifier les paires pointées de base dans la norme scheme. En Racket, il faut utiliser le paquetage .
Blocs d'expression
Certaines expressions pouvant effectuer des effets de bord, il devient possible de les mettre en séquence. Contrairement aux formes et , certaines formes, telle le nécessitent d'utiliser une forme spéciale de mise en séquence.
Les forme
\texttt{(begin <e_1> <e_2> ... <e_n>)}
- Chaque expression est évaluée selon son ordre d'apparition
- Le résultat de l'évaluation de la séquence est celui de la dernière
- Les valeurs des évaluations des expressions précédentes sont perdues
- Il existe une forme qui renvoie le résultat de la première expression de la séquence