#lang racket ; ------------------------Apariții libere/legate------------------------ ; Treceți cu mouse-ul pe deasupra variabilelor ; pentru a vedea dacă sunt legate (și la cine). (define x compose) (x (λ (y) x)) (define y (λ (x) x)) (y (λ (y) x)) (λ (z) ((+ z) x)) ((λ (x) (λ (y) (x y))) y) (define z 1) (λ (x) (y (λ (y) (x (y z))))) (x (λ (x) ((λ (x) y) (λ (y) (x z))))) ; Aparițiile sunt legate/libere ; în raport cu o expresie! (λ (x) (y (λ (y) (x (y z))))) (y (λ (y) (x (y z)))) ; Numele aparițiilor legate nu contează. (((λ (x) (y (λ (y) (x (y z))))) sqr) add1) (((λ (a) (y (λ (b) (a (b z))))) sqr) add1) ; Alfa-conversie (define f ((λ (x) (λ (y) (x y))) y)) ;(f 2) se comportă ca o funcție care îl ; aplică pe y asupra lui 2, ; nu ca o funcție care aplică 2 asupra lui 2! ; Când evaluarea aplicativă cauzează buclă infinită: ;(define E ((λ (x) y) ((λ (x) (x x)) (λ (x) (x x))))) ; Observație: ajunge să decomentați define-ul. ; La define, expresia se evaluează pentru a lega ; identificatorul E la VALOAREA ei.