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
*