Vyhodnocování lambda výrazů se provádí na základě pravidel, které označujeme jako konverze. Tyto konverze jsou založené na pojmu substituce.
Substituce e1[e2/x] vyjadřuje náhradu všech volných výskytů proměnné x ve výrazu e1 za výraz e2. Pro tuto substituci se vyžaduje, aby byla platná, což znamená, že se žádná volná proměnná z výrazu e2 nesmí po substituci stát vázanou.
Nejjednodušším typem konverze je alfa konverze, představující předjmenování proměnných. Máme-li abstrakci (\x->e), můžeme ji nahradit abstrakcí (\x'->e[x'/x]), ovšem pouze za předpokladu, že je uvedená substituce platná. Přejmenování vázaných proměnných v lambda výrazu je užitečné tehdy, pokud by při substituci mohlo dojít ke konfliktu volných a vázaných proměnných - vhodným přejmenováním můžeme dosáhnout toho, že takto zobecněná substituce je vždy platná.
Základní konverzí, na které je postaveno vyhodnocování lambda výrazů, je beta konverze. Představuje dosazení hodnoty argumentu za parametr abstrakce, která je použita v aplikaci na místě funkce. Konkrétně máme-li výraz ((\x->e1) e2), můžeme místo něj psát e1[e2 / x], samozřejmě opět za předpokladu, že naznačená substituce je platná. Pomocí beta konverze můžeme zjednodušovat lambda výrazy a tím je i vyhodnocovat.
![]() | Příklad 2.4. |
Výraz (\f->(\x-> f x)) (g y) můžeme s využitím beta konverze přepsat na (\x-> (g y) x). |
Cílem vyhodnocování lambda výrazu je obvykle dosažení stavu, kdy se již žádná další aplikace nedá pomocí beta konverze realizovat. Potom říkáme, že je výraz v normální formě. Není-li výraz v normální formě, pak musí obsahovat podvýraz, který je redukovatelný pomocí beta konverze. Takový podvýraz nazýváme beta redex (reducible expression, redukovatelný výraz). Podobně bychom mohli definovat i alfa redex.