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

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

"Лямбда" относится к Lambda Calculus или к определенному лямбда-выражению. Лэмбда-исчисление - это, в основном, ветвь логики и математики, которая занимается функциями и является основой функциональных языков программирования .

~ Уильям Райли-Ланд

Ответ 4

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

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

Ответ 5

В программировании нет такой вещи, как "лямбда". Это зависит от языка и т.д.

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

f = lambda { return "this is a function with no name" }
puts f.call

Ответ 6

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

Здесь мой ответ в 3 частях:
1. Лямбда - это функция, которая также является выражением. Это важная вещь.
2. Многие языки, которые реализуют так называемые "lambdas", добавляют некоторый синтаксический сахар, чтобы упростить и ускорить запись этих коротких функций, но это не требуется. 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

Ответ 7

Обрезано из wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

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