loop

Common Lisp propose une macro très puissante pour l'itération : loop. Elle permet un grand nombre de types d'itérations. Il s'agit en fait d'un langage enchâssé dans Common Lisp qui ne ressemble pas à la structure habituelle de Common Lisp. La communauté des programmeurs Common Lisp est partagée en ce qui concerne son utilisation. Certains pensent que la syntaxe de loop est tellement différente du reste de Common Lisp qu'il faut éviter de s'en servir. D'autres pensent que loop représente un outil tellement performant et sophistiqué pour décrire les itérations qu'il peut remplacer quasiment toutes les autres primitives d'itération.

Les arguments de la macro loop sont des clauses loop. Ces clauses permettent l'initialisation de variables, la description des valeurs prises par une variable pendant l'itération, la donnée d'expressions à évaluer avant ou après l'exécution de la boucle proprement dite, etc. Chaque clause commence par un symbole qui identifie son type. Les symboles qui identifient les clauses sont appelés mots-clés loop. Il ne s'agit pas de mots-clés proprement dits (à savoir des symboles du paquetages des mots-clés), mais de symboles propres à loop.

Pour comprendre l'effet de chaque type de clause, il est utile de penser au résultat de la macro-expansion de l'appel à loop. Ce résultat contient trois grandes parties : le prologue, le corps et l'épilogue. Le prologue contient les initialisations des variables locales ainsi que les expressions à évaluer avant l'exécution de la boucle proprement dite. Le corps contient les expressions à évaluer à chaque itération. L'épilogue contient les expressions à évaluer après les itérations.



Sous-sections
Irene DURAND
2011-10-14