La macro loop permet non seulement l'itération arithmétique, mais aussi l'itération sur les listes. Avec le mot-clé in, la variable d'itération prend comme valeur les éléments successifs de la liste :
* (loop for i in '(5 2 6 4)
do (print i))
5
2
6
4
NIL
*
Pour ce type de clause, le mot-clé by indique une fonction utilisée pour obtenir l'élément suivant. La valeur par défaut est la fonction cdr :
* (loop for i in '(5 2 6 4) by #'cddr
do (print i))
5
6
NIL
*
Si le mot-clé in est remplacé par on, on obtient non pas les éléments de la liste mais les sous-listes successives :
* (loop for i on '(5 2 6 4) by #'cddr
do (print i))
(5 2 6 4)
(6 4)
NIL
*