Я немного запутался по поводу «функции» и «лямбды». Я видел несколько примеров, показывающих, что ключевое слово схема lambda
работает очень похоже на ключевое слово JavaScript function
, но я действительно не знаю, как они связаны.
Мне сказали, что «функция» и «метод» могут использоваться взаимозаменяемо, когда речь идет об объектах в .net. Мне интересно, означают ли «лямбда» и «функция» одно и то же. Интересно, имеет ли «лямбда» какое-то эзотерическое значение, видя, что греческая буква лямбда (λ) появляется во многих аватарах на этом сайте. Чтобы сделать вещи еще более запутанными, в .net функциональные части C # ссылаются на выражения функций, передаваемые другой функции как «лямбда-выражения», поэтому слово действительно кажется повсеместным.
Я также смутно знаком с термином «лямбда-исчисление».
В чем разница между функцией и лямбда?
источник
I wonder if 'lambda' has some esoteric meaning, seeing that the Greek letter lambda (λ) appears in so many avatars on this site.
Можно было бы надеяться, что это будет связано с лямбда-исчислением, но у меня странное чувство, что Half Life виноват в лямбда-аватарах.Ответы:
Слово «лямбда» или «лямбда-выражения» чаще всего относится к анонимным функциям. Таким образом, в этом смысле лямбда является своего рода функцией, но не каждая функция является лямбда (то есть именованные функции обычно не называют лямбда-выражениями). В зависимости от языка анонимные функции часто реализуются иначе, чем именованные функции (особенно в языках, где анонимные функции являются замыканиями, а именованные функции - нет), поэтому обращение к ним с использованием различных терминов может иметь смысл.
Различие между ключевым словом lambda схемы и ключевым словом функции Javascript заключается в том, что последнее можно использовать для создания как анонимных функций, так и именованных функций, тогда как первое создает только анонимные функции (и вы будете использовать
define
для создания именованных функций).Лямбда-исчисление - это минимальный язык программирования / математическая модель вычислений, которая использует функции в качестве единственной «структуры данных». В исчислении lamdba лямбда-символ используется для создания (анонимных) функций. Отсюда и использование термина «лямбда» в других языках.
источник
define
(илиlet
один из его родственников, или внутреннее определение) для создания имен - вот и все. Там нет ничего особенного вdefine
отношении функций.define
действительно имеют специальную форму для определения функций (например , вы можете написать(define (f x) (foo))
вместо(define f (lambda (x) (foo)))
), но моя точка зрения в том , что вы не можете создать именованный функцию , используяlambda
один, то вы не можете написать что - то вроде(lambda f (x) (foo))
определить функцию с именемf
это принимает один аргумент, как вы можете сfunction
ключевым словом Javascript .define
имеет это как синтаксический сахар, так что это не так важно, как его роль инструмента привязки имени для всех значений. Что касаетсяlambda
не создания имени само по себе: это важная особенность, поскольку она отделяет присвоение имен от форм функций ... IMO JS делает правильную вещь, разрешая разделение, одновременно принимая необязательное имя для тех масс, которые были бы в ужасе от идея функции без имени. (И, к счастью, размер этих масс в целом уменьшается ...)Лямбда - это просто анонимная функция - функция без имени.
источник
lambda
выражение в Scheme похоже наfunction
выражение без имени, но ничто не мешает вам позже дать ему имя. Напримерvar f = [function(x){return x;}][0]
. Можно утверждать, что само значение функции не имеет имени, но это было бы верно для всех функций ...Ответили здесь: https://stackoverflow.com/questions/16501/what-is-a-lambda-function
По сути, лямбда - анонимная функция.
источник
В C # анонимная функция - это общий термин, который включает как лямбда-выражения, так и анонимные методы (анонимные методы - это экземпляры делегатов без фактического объявления метода).
Лямбда-выражения можно разбить на выражение лямбда и выражение лямбда
Выражение лямбда:
Оператор лямбда аналогичен выражению лямбда, за исключением того, что оператор (ы) заключены в фигурные скобки:
Когда мы говорим о лямбда-выражениях в JavaScript, это просто означает использование функции в качестве аргумента при вызове другой функции.
источник
TL; DR Как указывали другие: лямбда-нотация - это просто способ определения функций без необходимости давать им имя.
Длинная версия
Я хотел бы подробнее остановиться на этой теме, потому что я нахожу это очень интересным. Отказ от ответственности: я взял курс на лямбда-исчисление давным-давно. Если кто-то с более глубокими знаниями обнаружит какие-либо неточности в моем ответе, не стесняйтесь помочь мне улучшить его.
Давайте начнем с выражений, например,
1 + 2
иx + 2
. Такие литералы, как1
и2
, называются константами, поскольку они связаны с конкретными фиксированными значениями.Такой идентификатор
x
называется переменным, и для его оценки вам необходимо сначала привязать его к некоторому значению. Таким образом, в основном вы не можете оценить,x + 1
пока вы не знаете, чтоx
есть.Лямбда-нотация обеспечивает схему для привязки определенных входных значений к переменным. Лямбда - выражение может быть сформировано путем добавления
λx .
в передней части существующего выражения, напримерλx . x + 1
. Переменнаяx
называется свободным вx + 1
и связаны вλx . x + 1
Как это помогает в оценке выражений? Если вы передаете значение лямбда-выражению, например, так
затем вы можете оценить все выражение, заменив (связав) все вхождения переменной
x
значением 2:Итак, лямбда-нотация обеспечивает общий механизм для привязки вещей к переменным, которые появляются в блоке выражения / программы. В зависимости от контекста это создает совершенно разные понятия в языках программирования:
Помимо различий, лямбда-нотация заключается в определении формальных параметров и их привязке к фактическим параметрам.
Следующий шаг - дать имя функции / процедуре. В нескольких языках функции являются значениями, как и любые другие, поэтому вы можете дать функции имя следующим образом:
Как отметил Эли Барзилай, эти определения просто связывают имя
f
со значением, которое оказывается функцией. Таким образом, в этом отношении функции, числа, строки, символы - это все значения, которые могут быть связаны с именами одинаково:В этих языках вы также можете привязать функцию к имени, используя более знакомую (но эквивалентную) запись:
Некоторые языки, например C, поддерживают только последние обозначения для определения (именованных) функций.
Затворы
Несколько заключительных замечаний относительно замыканий . Рассмотрим выражение
x + y
. Это содержит две свободные переменные. Если вы связываете,x
используя лямбда-нотацию, вы получаете:Это не (пока) функция, потому что она все еще содержит свободную переменную
y
. Вы можете сделать из него функцию, связавy
также:или же
который так же, как
+
функция.Но вы можете связать, скажем,
y
по-другому (*):Результатом применения функции incrementBy к числу является замыкание, то есть функция / процедура, тело которой содержит свободную переменную (например
y
), которая была связана со значением из среды, в которой было определено замыкание.Так же
incrementBy 5
как и функция (замыкание), которая увеличивает числа на 5.НОТА (*)
Я немного обманываю здесь:
эквивалентно
поэтому механизм связывания такой же. Интуитивно я думаю, что замыкание представляет часть более сложного лямбда-выражения. Когда это представление создано, некоторые из привязок материнского выражения уже были установлены, и замыкание использует их позже, когда оно будет оценено / вызвано.
источник
«Лямбда» в программировании обычно означает «лямбда-функцию» (или также «лямбда-выражение», «лямбда-термин»). Когда функция - это именованный блок кода, определенный до ее использования, «лямбда-функция» - это блок кода (или выражение), определенный вместо использования, который может использоваться как первоклассный гражданин в языке программирования.
В JavaScript ES6 (2015) есть короткий синтаксис для определения лямбд, называемый «Функции стрелок» . В C # такой синтаксис был введен в .NET 3.0 (около 2006 г.) .
В математике понятие «функция» имеет несколько значений, где одно из значений относится к нотации функции (т. Е. Как записать ее), тогда «лямбда-функция» (в исчислении) представляет собой особый вид нотации функции. Для более подробного обсуждения проверьте лямбда-функции в языках программирования .
источник