Что такое лямбда?

93

Может ли кто-нибудь дать хорошее описание того, что такое лямбда? У нас есть теги для них, и они касаются секретов вопроса C #, но мне еще предстоит найти хорошее определение и объяснение того, что они из себя представляют.

Фред
источник
2
возможный дубликат Что такое лямбда (функция)?
nawfal 04
Выражение amda прекрасно объяснено здесь .
Джамир Мулани

Ответы:

135

Замыкания, лямбда-выражения и анонимные функции не обязательно одно и то же.

Анонимная функция - это любая функция, которая не имеет (или, по крайней мере, не нуждается) в собственном имени.

Замыкание - это функция, которая может обращаться к переменным, которые находились в ее лексической области видимости, когда она была объявлена, даже после того, как они выпали из области видимости. Анонимные функции не обязательно должны быть закрытыми, но они есть в большинстве языков и становятся менее полезными, когда это не так.

Лямбда… не совсем так хорошо определена в компьютерных науках. Многие языки даже не используют этот термин; вместо этого они просто будут называть их замыканиями или анонимными функциями или изобретать свою собственную терминологию. В LISP лямбда - это просто анонимная функция. В Python лямбда - это анонимная функция, ограниченная одним выражением; что-нибудь еще, и вам понадобится именованная функция. Лямбды - это замыкания на обоих языках.

Иви
источник
термин может подразумевать лямбда-исчисление en.wikipedia.org/wiki/Lambda_calculus
Стивен А. Лоу
Ух ты, я получил более одного голоса, чтобы задать этот вопрос. Я видел так много технических ответов, увязших в терминологии, но этот краткий и сразу отражает суть.
Мэтью Стопа
8
+1 за то, что не использовал термин «закрытие» для определения закрытия, как будто он делает его более ясным.
Дэниел
5
Область, в которой может существовать некоторая переменная (т.е. область видимости), определенная структурой вашего кода (т.е. лексически). Например, в большинстве языков функция определяет лексическую область видимости; любая переменная, объявленная внутри функции, недоступна вне ее.
Eevee
19

Также называется закрытием или анонимными функциями .. Лучшее описание я нашел здесь . По сути, встроенный блок кода, который можно передать в качестве аргумента функции.

Гульзар Назим
источник
8

Это просто анонимная функция, объявленная встроенной, обычно назначаемая делегату, когда вы не хотите писать полноценную функцию.

В таких языках, как lisp / scheme, они часто довольно свободно передаются как параметры функций, но идиома в C # обычно находит лямбды, используемые только для ленивого вычисления функций, как в linq, или для того, чтобы сделать код обработки событий немного короче.

JasonTrue
источник
5

В программировании нет такого понятия, как «лямбда». Это зависит от языка и т. Д.

Короче говоря, обычно в языке, который «имеет лямбды», термин используется для обозначения анонимных функций или, в некоторых случаях, замыканий. Вот так в Ruby:

f = lambda { return "this is a function with no name" }
puts f.call
rfunduk
источник
4

В ответ на предыдущие ответы:
-В анонимных функциях важно не то, что они не требуют имени.
-Корпуса - отдельное понятие.
-Гигантская статья в Википедии не проясняет это.

Вот мой ответ, состоящий из трех частей:
1. Лямбда - это функция, которая также является выражением. Это главное.
2. Многие языки, реализующие так называемые «лямбды», добавляют некоторый синтаксический сахар для упрощения и ускорения написания этих коротких функций, но это не требуется.
3. Некоторые языки могут требовать, чтобы лямбда не имела побочных эффектов . Это была бы более чистая лямбда в функциональном смысле.

Когда функция является выражением, это «гражданин первого класса» в языке. Я могу делать с ним все важные дела:

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
cmeub
источник
1

Вырезано из Википедии: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

В языках программирования, таких как Lisp и Python, лямбда - это оператор, используемый для обозначения анонимных функций или замыканий после использования лямбда-исчисления.

Сетка
источник
Полагаю, вы имели в виду эту строку: в языках программирования, таких как Lisp и Python, лямбда - это оператор, используемый для обозначения анонимных функций или замыканий после использования лямбда-исчисления. Я уже просмотрел статью, но пропустил это.
Фред