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

17

Недавно я слышал, как люди говорят, что код - это лямбда. Я никогда не слышал об этой фразе раньше. Что это означает?

Оливер Моран
источник
Это сделал. Несколько раз. Я даже пробовал это несколько раз, но, к сожалению, безуспешно. Может тебе повезет больше? Спасибо тем, кто откликнулся.
Оливер Моран
10
@ Оливер, часть вопроса здесь состоит в том, чтобы показать, что вы сделали, чтобы ответить на этот вопрос, чтобы люди не пробовали то же самое, что вы сделали, и застряли. Указывая, где в ссылках Википедии или Google вы обнаружили, что вы были сбиты с толку, это гарантирует, что на ваш вопрос будет получен лучший ответ, поскольку на общем уровне ответ может быть не тем, что вы хотели, поскольку он просто ссылается на то, что вы не получили ранее. Просто попробуйте попробовать то, что кто-то публикует, и посмотрите, что получится. Вы можете быть удивлены тем, какие результаты.
Джей Би Кинг
7
Я чувствую, что из этого можно сделать рэп - «мой код такой лямбда». Но я не могу ритмировать, это ничего не стоит. :-)
Пол Натан
1
@JB King + JB King - Спасибо за ваши вежливые комментарии. В общем, то, что вы оба говорите, разумно. Однако, в зависимости от запроса, иногда короткий и открытый вопрос лучше выявляет виды ответов, которых нет в других местах. Мой вопрос выявил именно те ответы, которые я искал. Я сформулировал это так, чтобы это было. Я надеюсь, что ответы ниже полезны для других с тем же вопросом. Ирония в том, что я удовлетворен ответами, а некоторые разочарованы вопросом.
Оливер Моран
2
@Paul Nathan - ваш код настолько лямбда, что вы явно никогда не планировали работать на какой-либо стандарт; это грубее, чем шлифовальный станок!
Гленатрон

Ответы:

20

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

Типичный пример лямбда-выражений в C #

Например:

List<int> items = new List<int>();
items.add(1);
items.add(2);
items.add(1);
items.add(3);

int CountofOnes = items.FindAll(item => item == 1).Count();

Console.Out.WriteLine(CountofOnes);

будет выводить: 2

В этом коде я передаю лямбда-конструкцию FindAllфункции объекта .NET List.

items.FindAll(item => item == 1)

Лямбда в этом вызове выполняет простое уравнение и возвращает логическое значение, сообщающее, FindAllчто делать.

Тимоти Грут
источник
2
Это не совсем так. Лямбда-выражение - это либо абстракция (не обязательно маленькая ), либо приложение, либо переменная (большинство языков также добавляют константы в этот список). Лямбда-члены не обязательно являются функциями и не обязательно передаются в качестве параметров.
SK-logic
Вы правы, я исправлю ответ ради ясности.
Тимоти Грут
3
Дайте мне пример лямбда-выражения, которое не является функцией, пожалуйста.
Инго
1
@ Инго, это, конечно, терминология лямбда-исчисления. en.wikipedia.org/wiki/Lambda_calculus#Lambda_terms
SK-logic
1
@ SK-логика Я предпочитаю видеть это по-другому. Такие языки, как Haskell и C #, позволяют привязывать функции к именам в конструкции let (rec) или в форме «супер-комбинаторов» (т. Е. Привязок функций верхнего уровня), и в этом я вижу такую ​​серьезную разницу, которую я делаю я не считаю правильным применять здесь оригинальную лямбда-терминологию. Потому что в LC это невозможно (именно поэтому вам нужен Y-комбинатор для рекурсии). Результат ((\ xy -> x) a) и (const a) в Haskell одинаков, и оба являются приложениями, но я бы назвал только первый термин как «лямбда-приложение».
Инго
3

Анонимная (неназванная) функция или объект, который обычно указывается в качестве аргумента другой функции.

Следовательно, пространство имен менее загрязнено.

Благовест Буюклиев
источник
1

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

Это лямбда-выражение в Python:

lambda x: x + 1

Представляет функцию, которая увеличивает свой параметр xна 1.

Пабло Санта Круз
источник