Подтвердить что ты не робот

Насколько полезно знание лямбда-исчисления?

Для всех людей, которые знают лямбда-исчисление: Какую пользу он вам купил в отношении программирования? Вы порекомендовали бы, чтобы люди узнали об этом?

4b9b3361

Ответ 1

Если вы хотите запрограммировать любой язык функционального программирования, это необходимо. Я имею в виду, насколько полезно знать о машинах Тьюринга? Ну, если вы пишете C, парадигма языка довольно близка к машинам Тьюринга - у вас есть указатель на инструкцию и текущая инструкция, и машина принимает какое-то действие в текущем состоянии, а затем перемещается вперед к следующей команде.

На функциональном языке вы просто не можете так думать - это не языковая парадигма. Вы должны подумать об исчислении лямбда и о том, как там оцениваются термины. Вам будет намного сложнее быть эффективным на функциональном языке, если вы не знаете лямбда-исчисления.

Ответ 2

Преимущество лямбда-исчисления заключается в том, что он представляет собой чрезвычайно простую модель вычислений, эквивалентную машине Тьюринга. Но в то время как машина Тьюринга больше похожа на язык ассемблера, исчисление лямбда больше похоже на язык высокого уровня. И если вы узнаете Церковные кодировки, которые помогут вам изучить технику программирования, называемую продолжением-пропуском стиля, что весьма полезно для реализации поиска backtracking и других опрятных трюков.

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

Исчисление лямбда также просто очень круто само по себе: точно так же, как знание языка ассемблера, оно будет углубить ваше понимание вычислений. Особенно интересно программировать универсальную машину turing в исчислении лямбда. Но это фундаментальная математика, а не практическое программирование.

Ответ 3

Честно говоря, изучение лямбда-исчисления перед функциональным программированием заставило меня понять, что эти два не имеют отношения к C любому императивному программированию.

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

Большинство языков функционального программирования вообще не требуют, чтобы вы изучали лямбда-исчисление, что бы это ни значило, лямбда-исчисление безумно минимально, вы можете "узнать" его аксиомы менее чем через час. Чтобы знать результаты из него, как и теорема о неподвижной точке, теорема Церков-Россера и т.д. Просто не имеет отношения к функциональному программированию.

Кроме того, лямбда-абстракции часто считаются "функциями", я не согласен с этим, это алгоритмы, а не функции, незначительная разница, большинство "функциональных языков" больше относятся к их функциям в том, как это делает классическая математика.

Однако, например, чтобы эффективно использовать Haskell, вам нужно понять определенные системы типов, независимо от лямбда-исчисления система System F типа может применяться ко всем "функциям" и вообще не требует абстракций лямбда. Обычно в математике скажем f: R ^ 2 → R: f (x) = x ^ 2. Мы могли бы сказать: f (x) = x ^ 2:: R → R → R. На самом деле, Haskell приближается к этим обозначениям.

Лямбда-исчисление является теоретическим формализмом, функции Haskell на самом деле не являются более "лямбда-абстракциями", чем f: f (x) = x ^ 2, что делает лямбда-абстракции интересными, так это то, что он позволяет нам определить, что обычно рассматривается как "константы" как "функции", ни один функциональный язык не делает этого из-за огромных вычислительных издержек. Haskell и аналогично - это ограниченная форма системы System F, применяемая к функциям, используемым в повседневной классической математике. Функции в Haskell, безусловно, не являются анонимными формально символическими сокращениями-претендентами, так как они находятся в лямбда-исчислении. Большинство языков функционального программирования не являются символическими системами перезаписывания на основе редукции. Lisps в некоторой степени, но что парадигма сама по себе и ее "ключевое слово lambda" действительно не удовлетворяют называнию ее лямбда-исчисления.

Ответ 4

Я считаю, что использование лямбда-исчисления применительно к программированию на практике заключается в том, что это довольно минимальная система, которая фиксирует сущность абстракции (или "анонимные функции" или закрытие, если хотите). Помимо этого, я не думаю, что это вообще важно, за исключением случаев, когда вам нужно реализовать абстракцию самостоятельно (как упоминал Tetha (114646).

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

Ответ 5

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

Скорее всего, это поможет вам лучше понять функциональное программирование. Но даже если это не так, это все еще классная вещь, которую стоит изучать. Y-combinator - вещь прекрасная.

Ответ 6

Если вы хотите быть техником и писать программы для того, чтобы что-то делать, вам не нужно знать лямбда-исчисление, машины с конечным состоянием, автоматы отталкивания, регулярные выражения, контекстно-свободную грамматику, дискретную математику, и др.

Но если у вас есть любопытство по поводу более глубоких загадок, лежащих в основе этого материала, вы можете начать задаваться вопросом, как можно ответить на эти вопросы. Концепции прекрасны и расширят ваше воображение. Я также думаю, что они, кстати, делают одного лучшего практикующего.

Что меня зацепило, так это книга Минского "Вычисление: конечные и бесконечные машины".

Ответ 7

Один из возможных способов изучения лямбда-исчисления -

http://en.wikipedia.org/wiki/Lambda_Calculus

Или, если вы хотите больше, вот мой блог, посвященный исчислению лямбда и тому подобное.

http://weblogs.manas.com.ar/lziliani/

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

http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=sr_1_1?ie=UTF8& s = книги & QID = 1222088714 & ср = 8-1

Ответ 8

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

Это облегчило мне понимание передовых концепций, таких как стратегии типов и стратегии оценки (например, вызов по имени и вызову по значению).

Я не думаю, что нужно что-то знать об исчислении лямбда, чтобы использовать базовые методы функционального программирования. Однако понимание лямбда-исчисления облегчает изучение теории расширенного программирования.

Ответ 9

лямбда-исчисление - это вычислительная модель, точно так же, как машина для turing. Таким образом, полезно, если вам нужно реализовать определенный оценщик для языка, основанного на этой модели, однако на практике вам просто нужна основная идея (например, аргумент точки размещения семантически корректен в теле функции?) И что о Это.

Ответ 10

Я также хотел бы упомянуть, что если вы делаете что-либо в области НЛП, исчисление лямбда лежит в основе огромного объема работы в композиционной семантике.

Ответ 11

Преимущества для меня - более компактное синергетическое программирование. Материал имеет тенденцию проходить горизонтально больше, чем вертикально. Плюс это очень полезно для прототипирования простых алгоритмов. Не знаю, использую ли я его в полном объеме, но я считаю его очень полезным.