Une variation de la boucle do est la boucle do*, qui s'apparente à let* dans le sens où les variables d'itération sont affectées séquentiellement. Voici le résultat de l'exemple précédent avec une boucle do* :
* (do* ((i 0 (1+ i))
(j 0 i))
((> i 5))
(format t "i: ~a j: ~a~%" i j))
i: 0 j: 0
i: 1 j: 1
i: 2 j: 2
i: 3 j: 3
i: 4 j: 4
i: 5 j: 5
NIL
*
Ici, i est d'abord mise à jour avec (1+ i), puis j est mise à jour (avec la valeur de i).