Я студент университета, и в настоящее время мы изучаем лямбда-исчисление. Однако мне все еще трудно понять, почему это полезно для меня. Я понимаю, что если вы занимаетесь множеством функционального программирования, это может быть полезно, однако я считаю, что в действительности это не нужно для изучения функционального программирования, как вы думаете?
Во-вторых, есть ли смысл в использовании Lambda Calculus в области компьютерных наук, но за пределами функциональных языков программирования?
Вы запрашиваете приложение вне компьютерных наук и логики. Это легко найти, например, в алгебраической топологии удобно иметь декартову замкнутую категорию пространств, см. Удобную категорию топологических пространств на nLab. Формальным языком, соответствующим декартовым замкнутым категориям, является -калькулус. Позвольте мне проиллюстрировать на простом примере, как это удобно.λ
Во-первых, в качестве разминки предположим, что кто-то спрашивает вас, есть ли функция определенная как дифференцируемо. На самом деле вам не нужно доказывать, что это так, вы просто наблюдаете, что это состав дифференцируемых функций, следовательно, дифференцируемых. Другими словами, вы сделали простой вывод, основанный на форме определения. f ( x ) = x 2 e x + log ( 1 + x 2 )f:R→R f(x)=x2ex+log(1+x2)
Теперь для реального примера. Предположим, кто-то спрашивает вас, есть ли функция определенная как непрерывен. Опять может сразу ответить «да», потому что функция определяется с помощью -calculus и начинается с непрерывных отображений , , и т. д.f:R→R
Различные расширения -calculus позволяют делать то же самое в других областях. Например, поскольку гладкий топос является декартовой замкнутой категорией, любая карта, которая определяется с помощью -calculus, начиная с производных и кольцевой структуры вещественных чисел (и вы можете добавить экспоненциальную функцию, если хотите), автоматически гладкий; плавный. (На самом деле, основной смысл гладких топосов - это существование нильпотентных бесконечно малых величин, которые позволяют вам осмысленно говорить такие вещи, как «мы разбиваем диск на бесконечно тонкие равнобедренные треугольники».)λ λ
источник
Один из способов взглянуть на -calculus - это простая и краткая модель параметризации программ. Вы параметризуете код практически на любом языке программирования, который имеет функции, процедуры или методы, и на любом языке, который имеет модули или который позволяет вам параметризировать типы. Параметризация является формой повторного использования. Поскольку -calculus очень прост, общие черты между многими языками программирования, которые позволяют параметризовать код, особенно отчетливо проявляются.λ λ
Конечно, можно быть очень хорошим программистом, не зная о -calculus, но вам не хватает чего-то прекрасного, что также очень полезно.λ
источник
Microsoft LINQ (Language INtegrated Query) привносит функциональные возможности программирования в процедурные языки. Он широко использует -calculus для распутывания зависимостей и разделения частей дерева выражений, которые могут быть делегированы на сервер базы данных. Это чрезвычайно практичное приложение с высокой коммерческой ценностью.λ
Я написал небольшое коммерческое приложение, используя функциональный язык, и я могу заверить вас, что, несмотря на то, что оно полезно для ученых и исследователей, они менее полезны в коммерческом отношении, чем их процедурные родственники. На самом деле это вопрос лошадей для курсов, и наиболее практичным из всех является язык, который может быть процедурным или функциональным по мере необходимости. Как следствие, функциональные возможности, которые были введены (в C #) для поддержки LINQ, такие как -expressions, довольно широко используются вне контекста запросов к базе данных.λ
Поэтому, когда вы, наконец, вынуждены делать странные вещи из-за того, что вам хочется платить, вы можете найти -calculus более полезным, чем вы ожидали, даже если вы почти наверняка не будете использовать функциональный язык.λ
источник
Не зная больше об этом, я слышу, что лингвисты используют лямбда-исчисление.
http://www.sfu.ca/~jeffpell/Ling406/LambdaAbstractionOH.pdf , https://files.nyu.edu/cb125/public/Lambda/
источник