Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

Однако, например, чтобы эффективно использовать Haskell, вам необходимо понимать некоторые системы типов, независимо от лямбда-исчисления, система типов System F может применяться ко всем «функциям» и вообще не требует никаких лямбда-абстракций.Обычно в математике мы говорим f:Р^2 -> Р:е (х) = х^2.Мы могли бы сказать:е (х) = х^2 ::Р -> Р -> Р.Фактически, Haskell довольно близко подходит к этому обозначению.

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

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

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

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

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

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

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

Меня зацепила книга Мински «Вычисления»:Конечные и бесконечные машины.

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

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

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=books&qid=1222088714&sr=8-1

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top