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


17

Нещодавно я чув, як люди говорять про те, що код є "лямбда". Я ніколи раніше не чув цієї фрази. Що це означає?


Це було. Декілька разів. Я навіть спробував це кілька разів - але, на жаль, не мав успіху. Можливо, вам пощастить більше? Дякую тим, хто відгукнувся.
Олівер Моран

10
@Oliver, частина запитання тут - це також показати, що ви зробили, щоб відповісти на це запитання, щоб люди не намагалися робити те саме, що ви робили, і застрягали. Вказавши, де у посиланнях на Вікіпедію чи Google ви виявили, що ви були розгублені, це гарантує краще відповідь на ваше запитання, оскільки на загальному рівні відповідь може бути не такою, про що ви хотіли, оскільки це лише посилання на те, чого ви раніше не отримували. Подумайте лише про те, що хтось інший публікує, і подивіться, що станеться. Ви можете бути здивовані, які результати.
JB King

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-логіка

Ви маєте рацію, я поправлю відповідь заради ясності.
Тимофій Гроот

3
Наведіть мені приклад лямбда-виразу, який не є функцією, будь ласка.
Інго

1
@ Ingo, це, звичайно, термінологія обчислення лямбда. en.wikipedia.org/wiki/Lambda_calculus#Lambda_terms
SK-logic

1
@ SK-логіка, я вважаю за краще по-іншому. Такі мови, як Haskell і C #, дозволяють прив’язувати функції до імен у конструкції let (rec) або у формі "суперкомбінаторів" (тобто прив'язки функцій верхнього рівня), і це я розглядаю як таку серйозну різницю, яку я роблю не вважаю, що правильно застосувати тут оригінальну лямбда-термінологію. Тому що в ЖК подібне неможливо (саме тому вам потрібен комбінатор Y для рекурсії). Результат ((\ xy -> x) a) і (const a) у Haskell однаковий, і обидва є додатками, але я б тільки перший термін як "лямбда-додаток".
Інго

3

Анонімна (безіменна) функція або об'єкт, який зазвичай позначається як аргумент іншій функції.

Отже, простір імен менш забруднений.


1

Лямбда зазвичай посилається на вираження функції у контексті функціонального програмування.

Це лямбда-вираз у python:

lambda x: x + 1

Представляє функцію, яка збільшує її параметр xна 1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.