Sulund on informaatikas avaldis (harilikult funktsioon), millel võib olla vabu muutujaid koos keskkonnaga, mis neid seob ("sulgub" ümber nende muutujate).[1]
Mõnikord nimetatakse sulunditeks ka lihtsalt anonüümseid funktsioone.[2]
Sulundeid kasutades saab objektorienteeritud programmeerimiseks implementeerida objekte ja klasse.[3]
Näiteks defineerime programmeerimiskeeles Scheme kõrgemat järku funktsiooni make-counter
, mis tagastab loenduri: funktsiooni, mis suurendab igal väljakutsel tema loomise kontekstis nähtavat muutujat count
ühe võrra ja tagastab saadud väärtuse:
(define make-counter () (let ((count 0)) (lambda () (set! cnt (+ count 1)))))
Seejärel loome make-counter
abil kaks loendurit:
(define counter-a (make-counter)) (define counter-b (make-counter))
Võime hakata kumbagi funktsiooni välja kutsuma ja näeme, et kummagi loendur suureneb omaette:
(counter-a) ;; --> 1 (counter-a) ;; --> 2 (counter-a) ;; --> 3 (counter-b) ;; --> 1 (counter-b) ;; --> 2 (counter-b) ;; --> 3 (counter-a) ;; --> 4 (counter-a) ;; --> 5 (counter-a) ;; --> 6 (counter-b) ;; --> 4