La macro dotimes capture un cas d'itération particulier très fréquent, à savoir l'évaluation d'une suite d'expressions un nombre prédéterminé de fois. La syntaxe est la suivante :
(dotimes (var nbrexp finexpr)
expression-1
expression-2
...
expression-n)
Ici var est un symbole et les autres composants sont des
expressions arbitraires. La partie finexpr est facultative,
et sera nil par défaut.
L'expression nbrexp est d'abord évaluée. Sa valeur (qui doit être un entier) détermine le nombre d'itérations à effectuer. Puis, les expressions sont évaluées avec la valeur de var égale à 0, 1, etc. Lors la dernière exécution des expressions, la valeur de var est égale à la valeur de l'expression nbrexp - 1.
Après la dernière itération, l'expression finexpr est évaluée et sa valeur sera la valeur de l'expression dotimes entière. Pendant l'évaluation de finexpr, la valeur de la variable d'itération var est égale à la valeur de l'expression nbrexp. Exemples :
* (dotimes (i 3)
(print i))
0
1
2
NIL
* (dotimes (i 3 (* i i))
(print i))
0
1
2
9
* (defparameter *n* 3)
*N*
* (dotimes (i *n* i)
(decf *n*))
3
*