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


93

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



2
можливий дублікат Що таке лямбда (функція)?
nawfal

вираз amda пояснено тут красиво.
Jameer Mulani

Відповіді:


135

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

Анонімна функція - це будь-яка функція, яка не має (або, принаймні, потребує) власного імені.

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

Лямбда - це .. не настільки чітко визначена, що стосується інформатики. Багато мов навіть не використовують цей термін; натомість вони просто називатимуть їх закриттями чи анонімними функціями або вигадуватимуть власну термінологію. У LISP лямбда - це просто анонімна функція. У Python лямбда - це анонімна функція, спеціально обмежена одним виразом; щось більше, і вам потрібна названа функція. Лямбди - це закриття обома мовами.


цей термін міг означати вираз ламбда-числення en.wikipedia.org/wiki/Lambda_calculus
Стівен А. Лоу

Ого, я мав більше одного голосу, щоб дати це запитання. Я бачив стільки технічних відповідей, заглиблених у термінологію, але цей короткий і негайно робить це.
Метью Стопа

8
+1 за те, що не використовується термін "закрити", щоб визначити закриття, ніби це робить це яснішим.
Даніель

5
Регіон, де може існувати деяка змінна (тобто область дії), визначена структурою вашого коду (тобто лексично). Наприклад, у більшості мов функція визначає лексичний обсяг; будь-яка змінна, оголошена всередині функції, недоступна поза нею.
Eevee

19

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



8

Це просто анонімна функція, оголошена вбудованою, найчастіше присвоюється делегатові, коли ви не хочете писати повноцінну функцію.

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


5

У програмуванні насправді не існує такого поняття, як "лямбда". Це залежить від мови тощо.

Коротше кажучи, як правило, мова, що має "лямбди", використовує цей термін для анонімних функцій або, в деяких випадках, закриття. Ось так, в Ruby:

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

4

У відповідь на попередні відповіді:
- Найголовніше в анонімних функціях - це не те, що вони не вимагають імені.
-Закриття - це окреме поняття.
-Гігантська стаття Вікіпедії не робить цього яснішим.

Ось моя відповідь із 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

Вирізано з wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

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


Думаю, ви мали на увазі такий рядок: У мовах програмування, таких як Lisp та Python, лямбда - це оператор, що використовується для позначення анонімних функцій або закриття, після використання лямбда-числення. Я вже відсканував статтю, але пропустив це.
Фред
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.