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



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

680   11  

11 ответов:

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

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

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

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

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

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

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

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

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

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

Я думаю, что использование лямбда-исчисления в отношении программирования на практике заключается в том, что это довольно минимальная система, которая захватывает суть абстракции (или "анонимные функции" или замыкания, если хотите). Кроме того, я не думаю, что это вообще важно, за исключением тех случаев, когда вам нужно реализовать абстракцию самостоятельно (как Teta (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

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

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

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

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

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

Comments

    Ничего не найдено.