Scopul laboratorului:
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.
O expresie lambda are trei forme posibile:
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.
$ y$
$\lambda x.x$
$(\lambda x.x\ y)$
$((\lambda x.\lambda y.x\ z)\ \lambda x.x)$
Evaluarea unei expresii lambda constă într-o serie succesivă de transformări (redenumiri de variabile, substituții de variabile cu alte expresii). Un pas de evaluare constă într-o singură substituție de variabile (posibil cu redenumire). Aplicând repetat pașii de evaluare putem obține un rezultat. Găsiți mai multe informații despre evaluare aici.
O strategie de evaluare este un set de reguli de a aplica substituții. Distingem între evaluare aplicativă și evaluare normală. Informal, evaluarea aplicativă evaluează mai întâi argumentele, apoi expresia cu totul, iar evaluarea normală evaluează întâi expresia, pasând funcțiilor argumente neevaluate.
De asemenea, există expresii pe care, deși o strategie de evaluare produce un rezultat, o altă strategie poate să cicleze.
Pentru definiții formale și exemple ale celor două strategii de evaluare, mai multe informații găsiți aici.
În scheletul de laborator, aveți patru fișiere:
Expr.hs
Show
și Eq
Eval.hs
Fișierele Parser.hs
și ParseExpr.hs
au scopul de a putea defini teste lizibile; puteți ignora conținutul lor.
subst
, care înlocuiește toate aparițiile libere ale unui variabile $ x$ din expresia $ E_1$ cu o expresie $ E_2$normal
pentru evaluare normalăapplicative
pentru evaluare aplicativăeval
, care primește un evaluator de un singur pas (i.e. normal
sau applicative
) și evaluează o expresie până la capăt