Omslutning

Från Unix.se, den fria unixresursen.

Programmeringsbegrepp

En omslutning (eng. closure) är ett dataobjekt som består av en funktion samt dess statiska omgivning. De fria variablerna i funktionen kommer när funktionen anropas anta värden från denna omgivning, även om anropet sker i en annan lexikal omgivning. Man säger att funktionen sluter om variablerna.

Ett exempel gör det hela klarare:

(defun make-adder (x)
  (lambda (y)
    (+ x y)))

(defparameter plus-5 (make-adder 5))

(mapcar plus-5 '(1 2 3 4 5)))
==> (6 7 8 9 10)

make-adder är en funktion som skapar funktioner som lägger ett värde till sitt argument. Vi använder make-adder till att skapa en funktion som hela tiden lägger 5 till sitt argument, och kallar den plus-5. Sedan kan vi använda vår funktion med mapcar för att lägga 5 till varje element i en lista. Omslutningen uppstår när make-adder återvänder. Den returnerar då en funktion som sluter om x, make-adders argument.

Dynamisk omslutning

När man till vardags talar om omslutningar menar man nästan alltid lexikala omslutningar. Dynamiska omslutningar förekommer knappast i språk av idag, men har funnits i tidigare Lispdialekter. En dynamisk omslutning fungerar på liknande sätt, men sluter om dynamiska variabelbindningar istället för lexikala.

Webbläsare

Closure är också en Webbläsare som kan hittas här (http://www.stud.uni-karlsruhe.de/~unk6/closure/).

Personliga verktyg