Что такое лямбда-исчисление (λ-исчисление)

Ответ

Лямбда-исчисление — формальная математическая система для описания функций и их вычисления. Основано на трёх концепциях:

  1. Абстракция (создание функций через λx.тело)
  2. Применение (вызов функции: f x)
  3. Подстановка (β-редукция: (λx.x+1) 2 → 3)

Пример на JavaScript-подобном синтаксисе:

const identity = x => x; // λx.x
const apply = (f, x) => f(x); // f x

apply(identity, 5); // → 5

Ключевые особенности:

  • Функции анонимны и могут принимать/возвращать другие функции
  • Нет встроенных типов данных (всё — функции)
  • Вычисления через подстановку и упрощение

Лямбда-исчисление легло в основу функционального программирования и повлияло на многие языки (Haskell, Lisp, JavaScript).

Ответ 18+ 🔞

Да ты посмотри, что эти математики вытворяют, блядь! Сидят, никого не трогают, и вдруг — лямбда-исчисление! А звучит-то как, ёпта, будто секретная операция в борделе. А на деле — просто формальная система, чтобы функции описывать и вычислять. Три кита, на которых всё держится, вот они, смотри:

  1. Абстракция — это когда ты из воздуха функцию делаешь. Записывается как λx.тело. Типа: «Вот тебе икс, а вот что с ним делать». Проще некуда.
  2. Применение — это когда ты эту самую функцию, сука, вызываешь. Пишешь f x и ждёшь, что будет. Как кнопку нажимаешь.
  3. Подстановка (или, для своих, β-редукция) — это и есть магия. Берёшь выражение (λx.x+1) 2 и, хуяк-хуяк, подставляешь двойку вместо икса. Получается 3. Всё, вычисление закончено, можно пить чай.

Вот, смотри, как бы это на нашем, человеческом, JavaScript-подобном языке выглядело:

const identity = x => x; // Это и есть наша λx.x, функция, которая возвращает то, что получила. Гениально и бесполезно, как дырка от бублика.
const apply = (f, x) => f(x); // А это — наше применение, f x. Берём функцию f и пихаем в неё x.

apply(identity, 5); // → 5

И что в итоге? А в итоге, блядь, получается, что:

  • Все функции тут — анонимные бродяги, без имени и прописки. Могут друг друга принимать и рожать, как кролики.
  • Никаких тебе встроенных типов — ни чисел, ни строк. Вообще нихуя! Всё, абсолютно всё, можно слепить из одних только функций. Представляешь этот пиздец? Из воздуха конфетку сделать.
  • А вся работа — это тупо подстановка да упрощение. Как детский конструктор собрал, разобрал.

И самое главное — эта, с позволения сказать, абстракция, лёгла в основу целого парадигмального направления, блядь! Функциональное программирование, Haskell, Lisp, даже в JavaScript эти лямбды пролезли. Сидели себе тихие математики, думали о высоком, а теперь половина интернета на их идеях работает. Вот так-то, ёпта.