Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Вот мой ответ в 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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top