Eu tenho mexido com linguagens de programação funcional por alguns anos, e continuo encontrando essa frase. Por exemplo, é um capítulo de "The Little Schemer, que certamente antecede o blog com esse nome. (Não, o capítulo não ajuda a responder minha pergunta).
Entendo o que lambda significa, a idéia de uma função anônima é simples e poderosa, mas não entendo o que "o máximo" significa neste contexto.
Lugares que vi essa frase:
- O título do capítulo 8 de The Little Schemer
- Um blog: http://lambda-the-ultimate.org/
- Uma série de artigos "Lambda the ultimate X": http://library.readscheme.org/page1.html
Sinto que estou perdendo uma referência aqui, alguém pode ajudar?
functional-programming
terminology
history
lambda
Eric Wilson
fonte
fonte
Respostas:
Sim, é simplesmente uma frase recorrente no título de vários artigos, a partir de alguns dos anos 70, nos quais Sussman e Steele demonstram o uso do cálculo lambda para programação, por meio de um dialeto minimalista do Lisp chamado " Scheme " o objetivo. Você pode encontrar os documentos aqui ; eles são interessantes e surpreendentemente relevantes.
Não tenho certeza se isso já foi explicitamente declarado, mas é claro (do contexto, depois de ler os artigos e conhecer os antecedentes gerais e os interesses de pesquisa dos autores) que a frase é simplesmente um slogan atraente para a afirmação de que abstrações lambda , como primitivo computacional, não é apenas universal no sentido formal (de ser capaz de codificar qualquer programa de alguma maneira, por mais embaraçoso), mas universal no sentido prático que todo e qualquer construto presente em outras línguas, mesmo aquelas que são desde o início, pode ser reimplementado em um idioma baseado em lambda de maneira eficaz e natural de usar.
A frase repetida leva à forma generalizada óbvia "para todos os X, lambda é o X final", que é o sentido que geralmente considero "Lambda the Ultimate" como o nome do blog, observando que o LtU está preocupado com a linguagem de programação design e teoria. Ironicamente, o LtU provavelmente também seria um dos melhores lugares para encontrar alguém que pudesse falar sobre algo para o qual o lambda não é a implementação final. :]
Observe também que Sussman é um dos autores do SICP , um livro muito influente que também usa a linguagem Scheme e gasta bastante tempo introduzindo abstrações lambda como um conceito.
fonte
Lambda The Ultimate refere-se à idéia de que as lambdas do lambda-calculus podem efetivamente implementar todos os conceitos incorporados em todas as linguagens de programação, passado, presente e futuro. Classes, Módulos, Pacotes, Objetos, Métodos, Fluxo de Controle, Estruturas de Dados, Macros, Continuações, Corotinas, Geradores, Compreensões de Lista, Fluxos e assim por diante.
Por acaso, essa natureza última inclui representar uma função anônima. Porém, as lambdas não se limitam apenas a funções anônimas. Eles são ensinados dessa maneira, mas a essência do lambda é muito mais profunda do que as funções matemáticas sem nome. Em outras palavras, discordo de:
Por uma questão prática, o uso de lambdas como abstrações sintáticas ('macros'), que não são chamadas por valor / aplicativo (que funções matemáticas são), é absolutamente crucial para se adotar a ideia de que as lambdas realmente podem servir como núcleo de todo sistema de processamento de linguagem de programação.
Para a teoria: Há uma conexão interessante com o paradoxo de Bertrand Russell e os axiomas da compreensão (e extensão) na teoria ingênua dos conjuntos. Um lambda é para funções que a notação de construtor de conjuntos é para conjuntos: lambdas são notações de construtores de funções. Há uma diferença importante, geralmente ignorada, entre (lambda (x) (* xx)) e o que isso avalia (a função que esquadrinha). Se alguém não consegue distinguir entre os dois em geral, isto é, entre a notação e a denotação (um erro que Church e Frege cometeram), então se depara com paradoxos. Para sets e Frege, é o Barbeiro de Sevilha de Bertrand Russell que ilustra o erro; para funções e Igreja, é o Halting Oracle de Alan Turing.
Note que os paradoxos são coisas boas, práticas. Queremos que EVAL seja expressável e queremos que lambdas signifique mais do que apenas funções. Que assumir o contrário leva à contradição é o resultado desejável; serve como um bom teste de sanidade: as lambdas dificilmente podem ser definitivas se expressarem apenas meras funções.
Racket (anteriormente PLT Scheme) continua a processar a idéia de que linguagens de programação práticas realmente podem ser construídas, desde o início, em 'just lambda'.
Kernel , de Shutt, argumenta que o lambda não é realmente a abstração máxima. Ele argumenta que ainda existe um conceito mais primitivo (para o grego, apelidado de vau), que Sussman era conhecido como FLEX.
Felleisin e companhia (para Racket) obtêm grande parte do poder do vau de Shutt usando o conceito de fases ou níveis de metal, o que significa aproximadamente executar o código-fonte em vários estágios de tradução (como no pré-processamento C, mas usando o mesmo idioma em cada 'step', e os 'steps' não são realmente completamente distintos no tempo). (Portanto, eles argumentam que um lambda em uma fase superior se aproxima bastante de um vau.) De fato, eles argumentam que as fases são melhores que as FDPs, precisamente por serem mais limitadas; em resumo, "os FDPs são muito poderosos" (veja o trabalho de Wand, contra o qual Shutt argumenta).
O 3-Lisp de Brian Smith, "Reflexão processual nas linguagens de programação", tenta uma reformulação rigorosa da teoria das linguagens do tipo LISP, seguindo as linhas de notação distintamente acentuada (símbolos / idioma / programas) das denotações (coisas / referências / valores / resultados ) http://dspace.mit.edu/handle/1721.1/15961
Mitchell Wand, "The Theory of FRLs is Trivial", envia mais pregos para o caixão (temporário?) Que Kent Pittman criou para os FLEXs (que, como Felleisen, argumenta contra os FLEXs por tornar a compilação muito difícil).
Paul Graham argumenta com força e detalhadamente em "On Lisp" que o poder real é lambdas como transformadores de sintaxe (macros), e não como transformadores de valores (funções matemáticas). O desenvolvimento de Plotkin do cálculo lambda aplicado pode ser considerado um pouco contrastante, porque Plotkin limita o cálculo de Church ao seu subconjunto de chamada por valor / aplicativo. Obviamente, lidar com a parte aplicativa de forma eficiente é muito importante, por isso é importante desenvolver uma teoria especializada para o uso de lambda. (Plotkin e Graham não discutem um contra o outro.)
De fato, em geral, a noção de Lambda como Ultimate é apenas uma dessas reviravoltas no eterno debate entre eficiência e expressividade; é a posição de que o lambda é a melhor ferramenta para expressividade e, com bastante estudo, acabará por se mostrar a melhor ferramenta para eficiência também. Em outras palavras, podemos, se quisermos, ver o futuro das linguagens de programação como nada mais e nada menos que o estudo de como implementar eficientemente todos os fragmentos praticamente relevantes do cálculo lambda.
"As Próximas 700 Linguagens de Programação" de Landin, http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , é uma referência acessível que contribui para o desenvolvimento desse conceito de que Lambda é Ultimate.
fonte
Eu acho que é simplesmente uma referência a alguns documentos escritos por Sussman e Steele entre 1975 e 1980 chamados:
Veja o artigo da Wikipedia.
fonte