L'opérateur while permet de construire une structure de boucle «tant que… faire…».
La forme générale de cette structure est très simple:
(while {<vérité>} {<faire>})
Ainsi, tant que la condition décrite par le résultat de l'expression <vérité> est «vraie», l'expression paresseuse <faire» est évaluée.
Si l'expression retourne un résultat, la boucle s'arrête et l'évaluation se poursuit à l'expression suivante. Sinon, la <vérité> est à nouveau testée pour savoir si elle est «vraie». Si c'est le cas, l'expression paresseuse est de nouveau évaluée, sinon la boucle s'arrête.
(define '$x 3) (while{$x} { (display "$x = " $x) (set! $x (- $x 1)) })
⇒
$x = 3 $x = 2 $x = 1 Ready.
Il existe aussi une autre forme autorisée:
(while $ref {<faire>})
Cette forme ne prend pas une expression paresseuse comme condition mais une référence. Cette forme permet donc de tester la valeur de vérité référencée (équivalente à «vrai» ou «faux» par compositionnalité) avant chaque itération.
Notre précédent exemple peut donc s'écrire également comme ceci:
(define '$x 3) (while $x { (display "$x = " $x) (set! $x (- $x 1)) })
⇒
$x = 3 $x = 2 $x = 1 Ready.
On notera que l'évaluation de cette forme est légèrement plus rapide car l'interpréteur ne doit pas créer un contexte d'évaluation pour l'expression de condition.
|
![]() |
|
||||||||