Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 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) ===== Calcul lambda ===== [[https://en.wikipedia.org/wiki/Lambda_calculus|Calculul lambda]] este un model computațional ([[https://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis|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ție**/**funcț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 <note> Observați că ultimele două cazuri sunt definite //recursiv//. </note> 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 [[pp:lambda#syntax|aici]]. === Exemple === $ y$ $\lambda x.x$ $(\lambda x.x\ y)$ $((\lambda x.\lambda y.x\ z)\ \lambda x.x)$ ==== Evaluare ==== ===== Exerciții ===== TODO ===== Recommended Reading ===== TODO