Fermetures

Une fermeture est une fonction dont une partie de l'environnement est clos. Une fonction f ayant une variable locale v et une fonction imbriquée g peut par exemple passer g comme argument à une autre fonction h. C'est une situation courante ; h peut être la fonction sort et g une fonction de comparaison. En Common Lisp, g peut avoir accès à la variable v qui est donc close dans son environnement. La fonction g est donc une fermeture.

Les fermetures de ce type existent depuis 1960 (langage Algol 60) et étaient implémentées en Pascal. Mais les fermetures de Common Lisp sont plus générales, car mise à part la possibilité de les passer à une autre fonction pour invocation, on peut les manipuler comme des données normales. On dit que les fermetures sont de première classe. Un objet est de première classe si et seulement si :

Les fermetures jouent un rôle très important en Common Lisp. Il existe un grand nombre de fonctions paramétrées par d'autres fonctions. C'est une façon puissante d'éviter la duplication de code et de créer des bibliothèques réellement réutilisables.

Irene DURAND
2011-10-14