Motate to oba. Lambda vyraz a uzaver jsou dva odlisne, vzajemne ortogonalni pojmy.
Na LISPu nebo podobnych jazycich to jde videt mnohem lip.
Lambda vyraz je vyraz, jenz se vyhodnoti na funkci. Tecka.
(lambda (x) (* x x)) -> funkce jednoho paremetru pocitajici druhou mocninu.
Vsimnete si, ze zadny uzaver nevznikl, protoze telo lambda-vyrazu neobsahuje volne promenne.
(let ((y 10))
(lambda (x) (* x y)))
V tomto pripade je vracena funkce jednoho parametru (vracejici nasobek desiti) a v tomto pripade se jedna o uzaver, protoze symbol "y" je v lexikalne nadrazenem prostredi.
Na druhou stranu, aby vznikl uzaver, neni potreba lambda vyrazu:
def a():
y = 10
def b(x):
return x * y
return b
a()(20) ==> 200