#lang racket ; utilizare values ; ((λ (x) (values (sub1 x) x (add1 x))) 5) ; închiderea funcțională este creată de fiecare dată când construim o funcție (define f (let ((c 5)) (let ((a 1) (b 2) ) (λ (x) (+ x a b c)) )) ) (f 5) ; pot înlocui pe f cu valoarea sa? ; valoarea lui f este o închidere funcțională (), care este: ; < (λ (x) (+ x a b)) ; {a <- 1, b <- 2, c <- 5} > ; e ca și cum m-aș plimba cu un let după mine: ((let ( (a 1) (b 2) (c 5) ) (λ (x) (+ x a b c)) ) 5) ; echivalent cu cazul în care aș fi înlocuit textual (dar înlocuirea textuală este costisitoare): ; f = (λ (x) (+ x 1 2 5)) ; for x in [1,2,3,4]: print(x) -- x nu este o variabilă transparentă referențial ; sin(x) (define (f1 x y) x) ; (f1 1 ( (λ (x) (x x)) (λ (x) (x x)) )) ; nu se termină, pentru că evaluare aplicativă ; în Haskell se termină evaluarea pentru: let f x y = x in f 1 (last [1..]) ; în Racket, evaluarea nu este chiar dreapta-stânga, pentru că: (f1 1 (λ () ( (λ (x) (x x)) (λ (x) (x x)) )))