L'opérateur forever permet de construire une structure de boucle «faire à jamais…».
La forme générale de cette structure est très simple:
(forever {<faire>})
Cette forme de boucle n'est pas conditionnelle. Ainsi, à moins qu'un résultat soit retourné par l'expression paresseuse, la boucle ne s'arrête jamais et <faire> est relancé indéfiniment.
Dans l'exemple suivant, la boucle s'arrête lorsque l'expression paresseuse fourni un résultat.
(define '$x 20) (display "Le plus grand multiple de 7 Ã partir de " ($x) " est " (forever{ if{zero? (mod $x 7)} {$x} else {set! $x (- $x 1)} }) "." )
⇒
Le plus grand multiple de 7 Ã partir de 20 est 14.
Comme vous pouvez le constater, on utilise la boucle comme une fonction et on peut récupérer son résultat dans une expression sans nécessiter l'assignation de variables supplémentaires.
Dans cet exemple, nous avons éliminé les parenthèses inutiles. Vous avez peut-être aussi remarqué qu'on a forcé l'évaluation de la variable $x avant le lancement de la boucle. On a ainsi capturé sa valeur avant qu'elle ne soit altérée dans la boucle.
Bien entendu, on peut aussi modifier le comportement de la boucle à l'aide des opérateurs skip-loop et break-loop.
|
![]() |
|
||||||||