Czy ktoś mógłby dobrze opisać, czym jest Lambda? Mamy dla nich tag i dotyczą one tajemnic pytania w języku C #, ale przede wszystkim nie znalazłem dobrej definicji i wyjaśnienia, czym one są.
Czy ktoś mógłby dobrze opisać, czym jest Lambda? Mamy dla nich tag i dotyczą one tajemnic pytania w języku C #, ale przede wszystkim nie znalazłem dobrej definicji i wyjaśnienia, czym one są.
Odpowiedzi:
Zamknięcia, lambdy i funkcje anonimowe niekoniecznie są tym samym.
Funkcja anonimowa to dowolna funkcja, która nie ma (lub przynajmniej nie potrzebuje) własnej nazwy.
Zamknięcie to funkcja, która może uzyskać dostęp do zmiennych, które znajdowały się w jego zakresie leksykalnym, gdy zostało zadeklarowane, nawet po tym, jak wypadły poza zakres. Funkcje anonimowe niekoniecznie muszą być zamknięciami, ale są w większości języków i stają się mniej przydatne, gdy nie są.
Lambda nie jest ... nie do końca tak dobrze zdefiniowana, jeśli chodzi o informatykę. Wiele języków nawet nie używa tego terminu; zamiast tego będą nazywać je po prostu domknięciami lub funkcjami lub wymyślą własną terminologię. W LISP-ie lambda to po prostu funkcja anonimowa. W Pythonie lambda to anonimowa funkcja ograniczona do pojedynczego wyrażenia; cokolwiek więcej i potrzebujesz nazwanej funkcji. Lambdy są zamknięciami w obu językach.
Nazywany także domknięciami lub funkcjami anonimowymi. Najlepszy opis znalazłem tutaj . Zasadniczo, wbudowany blok kodu, który można przekazać jako argument do funkcji.
„Lambda” odnosi się do rachunku Lambda lub do określonego wyrażenia lambda. Rachunek lambda jest w zasadzie gałęzią logiki i matematyki zajmującą się funkcjami i stanowi podstawę funkcjonalnych języków programowania .
~ William Riley-Land
Jest to po prostu anonimowa funkcja zadeklarowana w tekście, najczęściej przypisywana delegatowi, gdy nie chcesz pisać pełnoprawnej funkcji.
W językach takich jak lisp / scheme często są one przekazywane dość swobodnie jako parametry funkcji, ale idiom w C # zazwyczaj znajduje lambdy używane tylko do leniwego oceniania funkcji, jak w linq, lub do uczynienia kodu obsługującego zdarzenia nieco bardziej rozwlekłym.
W programowaniu nie ma czegoś takiego jak „lambda”. To zależy od języka itp.
Krótko mówiąc, zwykle język, który „ma lambdy”, używa terminu dla funkcji anonimowych lub, w niektórych przypadkach, domknięć. Tak jak w Rubim:
f = lambda { return "this is a function with no name" }
puts f.call
W odpowiedzi na poprzednie odpowiedzi:
- Ważną rzeczą w przypadku funkcji anonimowych nie jest to, że nie wymagają one nazwy.
-Zamknięcia to osobna koncepcja.
- Gigantyczny artykuł w Wikipedii nie wyjaśnia tego.
Oto moja odpowiedź w 3 częściach:
1. Lambda to funkcja, która jest również wyrażeniem. To jest ważna rzecz.
2. Wiele języków, które implementują tak zwane „lambdy”, dodaje trochę cukru syntaktycznego, aby ułatwić i przyspieszyć pisanie tych krótkich funkcji, ale nie jest to wymagane.
3. Niektóre języki mogą wymagać, aby lambda nie miało skutków ubocznych . To byłaby bardziej czysta lambda w sensie funkcjonalnym.
Kiedy funkcja jest wyrażeniem, jest „obywatelem pierwszej kategorii” w języku. Mogę z nim zrobić wszystkie ważne rzeczy:
x = lambda(){ return "Hello World"; }
doit( 1, 2, lambda(a,b){ return a > b; }, 3 )
x = (lambda(a){ return a+1; }) + 5 // type error, not syntax error
(lambda(a,b){ print(a); log(b); })( 1, 2 ) // () is valid operator here
Wycięte z wikipedii: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word
W językach programowania, takich jak Lisp i Python, lambda jest operatorem używanym do oznaczania anonimowych funkcji lub domknięć po zastosowaniu rachunku lambda.