Itération avec des clauses simultanées

Il est possible d'utiliser plusieurs clauses d'itérations simultanément. La boucle se termine alors lorsque l'une des conditions de terminaison du début du corps l'indique :

* (loop for i from 2 to 345
        repeat 3
        do (print i))

2
3
4
NIL
*

Ce comportement est conforme à l'explication des trois parties de l'expansion de la macro loop.

Lorsque deux ou plusieurs clauses for existent simultanément, la création des variables se fait de manière séquentielle comme pour let* et do*. Il est donc possible d'utiliser la valeur initiale d'une variable dans une autre clause for :

* (loop for i from 2 to 345
        for j from i to 6 by i
        do (print j))

2
4
6
NIL
*

Pour obtenir un comportement similaire à let ou do, on peut utiliser le mot-clé and :

* (let ((i 3))
    (loop for i from 2 to 345
          and j from i to 6 by i
          do (print j)))

3
6
NIL
*

Irene DURAND
2011-10-14