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

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

91 голосов
/ 29 сентября 2008

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

Ответы [ 7 ]

129 голосов
/ 29 сентября 2008

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

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

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

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

19 голосов
/ 29 сентября 2008

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

17 голосов
/ 29 сентября 2008

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

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

8 голосов
/ 29 сентября 2008

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

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

5 голосов
/ 29 сентября 2008

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

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

f = lambda { return "this is a function with no name" }
puts f.call
3 голосов
/ 17 августа 2011

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

Вот мой ответ в 3 частях:
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
1 голос
/ 29 сентября 2008

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

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

...