This is an old revision of the document!


Evaluare expresii lambda

Scopul laboratorului:

  • obișnuirea studenților cu calculul lambda:
    • ce e o expresie
    • ce sunt variabilele libere/legate
    • cum se evaluează o expresie
  • implementarea unei aplicații practice de evaluare a expresiilor lambda (în Haskell)

Calculul lambda este un model computațional (echivalent dpv al expresivității cu Mașina Turing) în care computația este exprimată ca o serie succesivă de aplicări de funcții, i.e. substituții de variabile. Calculul lambda are la bază expresii lambda și reguli de transformare a acestora.

Expresii lambda

O expresie lambda are trei forme posibile:

  • variabilă
    • $ x$ - unde $ x$ este un nume/simbol
  • abstracțiefuncție * $\lambda x . E$ - unde $ x$ este un nume/simbol, iar $ E$ este o expresie lambda * aplicație**
    • $(E_1\ E_2)$ - unde $ E_1$ și $ E_2$ sunt expresii lambda
Observați că ultimele două cazuri sunt definite recursiv.

Variabilele modelează valori.

Abstracțiile de forma $\lambda x.E$ modelează funcții anonime cu un singur argument formal $ x$, și corpul $ E$.

Aplicațiile de forma $(E_1\ E_2)$ modelează aplicarea expresiei $ E_1$ peste argumentul concret $ E_2$.

Mai multe informații găsiți aici.

Exemple

$ y$

$\lambda x.x$

$(\lambda x.x\ y)$

$((\lambda x.\lambda y.x\ z)\ \lambda x.x)$

Evaluare

TODO

TODO