Pergunta

Para todas as pessoas que sabem lambda calculus : Qual o benefício demonstrado que comprou de você, relativo aos programas ? Você recomendaria que as pessoas aprendem isso?

Foi útil?

Solução

Se você quiser programa em qualquer funcional linguagem de programação , é essencial. Quer dizer, o quão útil é de saber sobre máquinas de Turing? Bem, se você escrever C, o paradigma linguagem é bastante perto de máquinas de Turing - você tem um ponteiro de instrução e uma instrução atual, ea máquina toma alguma ação no estado atual, e depois ambles junto para a próxima instrução

Em uma linguagem funcional, você simplesmente não pode pensar assim - que não é o paradigma da linguagem. Você tem que pensar de volta para cálculo lambda, e como os termos são avaliadas lá. Será muito mais difícil para você ser eficaz em uma linguagem funcional, se você não sabe o cálculo lambda.

Outras dicas

O benefício de lambda calculus é que é um modelo extremamente simples de computação que é equivalente a uma máquina de Turing. Mas enquanto uma máquina de Turing é mais como linguagem assembly, lambda calculus é mais um como uma linguagem de alto nível. E se você aprender Igreja codificações que irá ajudá-lo a aprender a técnica de programação chamada estilo de passagem de continuação , que é bastante útil para a implementação retrocesso de busca e outros truques.

O principal uso do cálculo lambda na prática é que é uma grande ferramenta de laboratório para estudar novas idéias de linguagem de programação . Se você tem uma idéia para um novo recurso de linguagem, você pode adicionar o novo recurso ao lambda calculus e você terá algo que é bastante expressivo para o programa ao ser simples o suficiente para estudar muito cuidadosamente . Esse uso é realmente mais para os designers de linguagem e teóricos do que para os programadores.

Lambda calculus é também apenas muito legal em seu próprio direito: como saber linguagem assembly, ele irá aprofundar sua compreensão da computação . É especialmente divertido de programar uma máquina de Turing universal no cálculo lambda. Mas esta é matemática fundamentais, a programação não é prático.

Para ser honesto, aprendendo cálculo lambda antes da programação funcional me fez perceber que os dois são tão independentes como C é para qualquer programação imperativa.

Lambda calculus é a linguagem de programação funcional, um um esotérico, um tarpit Turing se você gosta; acidentalmente é também o primeiro.

A maioria das linguagens de programação funcional em tudo não exigem que você 'aprender' cálculo lambda, o que isso significaria, lambda calculus é insanamente mínima, você pode 'aprender' seus axiomas em um menos de uma hora. Para conhecer os resultados a partir dele, como o teorema fixedpoint, o Teorema de Church-Rosser et cetera é apenas irrelevante para programação funcional.

Além disso, lambda-abstrações muitas vezes são tidos como 'funções', não concordo com isso, eles são algoritmos, não funciona, uma diferença menor, tratar a maioria dos 'linguagens funcionais de seus mais funções nos matemática clássica maneira faz.

No entanto, para, por exemplo, usar eficazmente Haskell você precisa entender certo sistemas do tipo , que é independentemente do cálculo lambda, o sistema de tipo Sistema F pode ser aplicado a todas as 'funções' e não requer nenhuma lambda abstrações em tudo. Comumente em matemática dizemos f: R ^ 2 -> R: f (x) = x ^ 2. Nós poderia ter dito:. F (x) = x ^ 2 :: R -> R -> R. Na verdade, Haskell vem muito perto de esta notação

Lambda calculus é um formalismo teórico, as funções de Haskell são realmente não mais 'abstrações lambda' do que f: f (x) = x ^ 2, realmente, o que faz abstrações lambda interessante é que ele permite-nos definir o que são normalmente vistos como 'constantes' como 'funções', nenhuma linguagem funcional faz isso por causa da enorme sobrecarga computacional. Haskell e afins é apenas uma forma restrita do Sistema F do sistema de tipo aplicada a funções como usado em matemática clássicos diárias. Funções em Haskell não são certamente os anônimos formalmente simbólicos redução de candidatos como eles estão em lambda-cálculo. A maioria das linguagens de programação funcionais não são sistemas de re-escrita com base em redução simbólica. Lisps são, até certo grau, mas isso é um paradigma em seu próprio e sua 'lambda palavra-chave' realmente não satisfaz chamando-lambda cálculo.

Eu acho que o uso do cálculo lambda com relação à programação na prática é que é um sistema bastante mínimo que capta a essência de abstração (ou "funções anônimas" ou encerramento, se você preferir). Outros, que eu não acho que é geralmente essencial exceto quando você precisa implementar abstração si mesmo (como teta ( 114646 ) mencionada).

Também discordo completamente com Denis Bueno ( 114701 ) que diz que é essencial para a programação funcional. É perfeitamente possível definir, usar ou compreender uma linguagem funcional, sem qualquer cálculo lambda em tudo. A fim de compreender a avaliação dos termos em linguagens funcionais (que, na minha opinião, contradiz um pouco o uso de uma linguagem funcional) você provavelmente será melhor de aprender sobre sistemas de reescrita prazo.

Eu concordo com aqueles que dizem que é teoricamente possível para aprender programação funcional sem aprender o lambda calculus, mas qual é a vantagem de não aprendendo o cálculo lambda? Não é como se ele leva um grande investimento de tempo.

Provavelmente, ele vai ajudar você a entender de programação funcional melhor. Mas mesmo se isso não acontecer, ainda é um fresco coisa vale a pena aprender. A Y-Combinator é uma coisa de beleza.

Se você só quer ser um técnico e escrever programas para fazer as coisas, então você realmente não precisa saber lambda-cálculo, máquinas de estados finitos, autômatos pushdown, expressões regulares, gramática livre de contexto, matemática discreta, etc.

Mas se você tem curiosidade sobre os mistérios mais profundos subjacentes a este material, você pode começar a se perguntar como essas perguntas podem ser respondidas. Os conceitos são bonitas e irá expandir a sua imaginação. Eu também acho que, aliás, fazer um melhor praticante.

O que me viciado foi o livro de Minsky Computação:. Finito e infinito Machines

O cálculo lambda é um modelo computacional, assim como a máquina de Turing. Assim, é útil se você precisa implementar um certo avaliador para uma linguagem com base neste modelo, no entanto, na prática, você só precisa a idéia básica (uh. Argumento lugar semanticamente correto no corpo de uma função?) E é sobre isto.

Uma maneira posible para aprender lambda cálculo é

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

Ou, se você quiser mais, aqui é o meu blog dedicado ao cálculo lambda e coisas assim

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

Como cada abstração de cálculos, com cálculo lambda você pode modelar o material usado na maioria das linguagens de programação, como subtipos. Para saber mais sobre isso, um dos melhores livros com usos práticos de cálculo lambda neste sentido é

http://www.amazon.com/Types-Programming-Languages-Benjamin -Pierce / dp / 0262162091 / ref = sr_1_1? ie = UTF8 & s = livros & qid = 1222088714 & sr = 8-1

Eu achei que o cálculo Lambda foi útil para entender como programação funcional trabalhou em um nível mais profundo. Especialmente como implementar linguagens funcionais.

Ele tornou mais fácil para mim compreender conceitos avançados como sistemas do tipo e estratégias avaliações (por exemplo, chamada pelo nome contra chamada por valor).

Eu não acho que é preciso saber nada sobre o cálculo lambda de usar técnicas básicas de programação funcional. No entanto compreensão do cálculo lambda torna mais fácil de aprender a teoria de programação avançada .

Eu também gostaria de mencionar que se você estiver fazendo qualquer coisa na área da PNL, lambda cálculo é a base de um corpo maciço de trabalho em semântica de composição.

Os benefícios para mim é uma programação sinérgica mais compacto. Material tende a fluir horizontalmente mais de verticalmente. Além disso, ele é muito útil para prototipagem algoritmos simples. Não sei se estou usando-o para o seu pleno potencial, mas acho que é muito útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top