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

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

Извините за правку, подумал, что math + maths - это повторяющийся тег.

William Keller 22.09.2008 16:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
73
1
20 986
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

Ответ принят как подходящий

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

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

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

mweerden 22.09.2008 17:41

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

Dmitry 03.09.2016 10:48

@Dmitry Я имею в виду, идея лямбда настолько удобна, что многие из нас склонны просто "изобретать ее заново", ОСОБЕННО, если вы метапрограммист, который пишет препроцессоры для своего кода, чтобы превратить циклы for в циклы for in. с помощью простых преобразований, или если подумать, лямбда-исчисление в целом обращается ко многим вещам, о которых вы думаете при написании препроцессоров естественным образом, поскольку все, о чем вы думаете, это преобразования и как их объединить в цепочку как можно дольше, желательно до самого конца. Без лямбда-выражений вас просто поразит сложность, и все развалится или станет неуправляемым.

Dmitry 03.09.2016 10:53

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

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

Для меня книга Введение в функциональное программирование с помощью лямбда-исчисления - лучшая отправная точка.

Edwin Dalorzo 15.10.2012 16:45

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

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

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

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

Без сомнения, лямбда-исчисление - замечательная вещь, которую стоит изучить. Однако меня по-настоящему удивляет, что я прочитал эти утверждения о том, что это полезно (или даже важно) для понимания функционального программирования. Мне трудно понять, как это поможет. Я что-то упустил?

mweerden 26.09.2008 15:50

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

Keith Pinson 25.10.2011 07:19

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

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

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

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

Я не вижу связи между церковными кодировками и CPS.

cdiggins 23.09.2011 02:29

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

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

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

Вы не знаете имеют, чтобы знать «конечные автоматы, регулярные выражения, контекстно-свободную грамматику», но они очень полезны во многих задачах программирования. Без них я был бы эффективен на 1/100. Например. ты не используешь GREP?

TFuto 04.08.2014 16:39

@TFuto: Я работаю в окнах. Я использовал, чтобы иметь grep, но с этими адскими обновлениями вещи, которые раньше работали, больше не работают :) Кроме того, эти формальные концепции больше относятся к изобретательской стороне C.S., а не к конформистской стороне. Они доставят мне неприятности, как здесь.

Mike Dunlavey 04.08.2014 17:01

Я предлагаю вам еще раз посетить REGEXP, например в Java. Это очень выразительная вещь, и если ее использовать с умом, можно сэкономить много времени. Кстати, вы можете использовать GREP в Windows с Cygwin или скомпилировать его с помощью MinGW. И если у вас есть немного больше времени, понимание, например, ANTLR - это огромный скачок в развитии. Вы можете создавать синтаксические анализаторы для большого набора языков ... Таким образом, вы можете заменить синтаксический анализ и проверку ввода вручную.

TFuto 05.08.2014 17:14

Честно говоря, изучение лямбда-исчисления до функционального программирования заставило меня понять, что эти два понятия так же не связаны, как 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 и ему подобные - это лишь ограниченная форма система типов Системы F, применяемая к функциям, используемым в повседневной классической математике. Функции в Haskell, конечно, не являются анонимными формально символическими заявителями редукции, как в лямбда-исчислении. Большинство языков функционального программирования не являются системами переписывания, основанными на символической редукции. В какой-то степени Лиспы, но это парадигма сама по себе, и его «ключевое слово лямбда» действительно не удовлетворяет называть его лямбда-исчислением.

Я согласен с точкой зрения: вы хотите изучить лямбда-исчисления напечатанный. Это безумно важно, например. Haskell.

Alexandre C. 08.04.2012 14:47

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

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

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

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