Paradigma imperativă - comenzi programul este o secvență de comenzi (de instrucțiuni) Paradigma declarativă (aici sunt funcțional, logic, etc) - legături între entități x = x+1 -> această expresie nu întoarce o valoare -> are ca efect modificarea valorii asociate numelui x - re-leagă variabila x (la o altă valoare) Collections.sort(mylist) -> efect lateral - modificarea lui mylist pur funcțional: let mylistsorted = sort(mylist) -> sort nu are efecte laterale (nu re-leagă variabile) - sort realizează un calcul și întoarce o valoare set! - fn în Racket cu efecte laterale λ-expresii: nume λ nume.expresie (unde expresie este o λ-expr) funcția de un parametru parametrul formal are numele nume funcția întoarce valoare calculată de expresie (expresie-funcție expresie-argument) expresie-funcție este o λ-expr expresie-argument este o λ-expr este parametrul actual (define f (lambda (x) ....)) - x parametru formal (f 1) - 1 este parametrul actual (λx.(x x) λy.y) evaluare prin subst textuală: (λx.(x x) λy.y) (x x) în care înlocuim pe x cu λy.y (λy.y λy.y) y în care înclocuim pe y cu λy.y λy.y ((λx.λy.x z) t) Luăm (λx.λy.x z) Funcția λx.λy.x Parametru formal x Corp λy.x Parametru actual z Rezultatul aplicării: Corpul λy.x în care pe x îl înlocuim cu z este λy.z Ne întoarcem la expresia mare: (λy.z t) Luăm (λy.z t) Funcția este λy.z Parametrul formal y Corpul z Parametrul actual t Rezultatul aplicării Corpul z în care pe y îl înlocuim cu t este z Ne întoarcem: avem rezultatul z Ce reducem: putem reduce orice expresie care este o aplicare și primul element din aplicare este o funcție (o expresie de tipul λparametru.corp). Un beta-redex este o expresie de forma textuală: (λ .........) La evaluarea beta-redexului, rezultatul este corpul funcției în care înlocuiesc toate aparițiile libere în corp ale parametrului formal cu parametrul actual. apariție legată de λx de la început λx. ........x......... nu mai apare niciun λx aici în corp