O que é uma língua lambda?

89

Eu estava lendo "JavaScript: The Good Parts" e o autor menciona que JavaScript é a primeira das linguagens lambda a ser lançada.

As funções do JavaScript são objetos de primeira classe com escopo (principalmente) léxico. JavaScript é o primeiro linguagem lambda a se tornar mainstream. No fundo, JavaScript tem mais em comum com Lisp e Scheme do que com Java. É Lisp com as roupas de C. Isso torna o JavaScript uma linguagem extremamente poderosa.

Não entendi o que é uma língua lambda. Quais são as propriedades de tal linguagem e como ela difere de linguagens como Java, C, C ++ e Php?

sushil bharwani
fonte
6
Lambda significa expressão anônima. Então, língua lambda -> linguagem com expressões anônimas
bevacqua
Link do Google Livros, FYI: books.google.co.uk/…
Lucas Jones
3
Veja cálculo lambda na wikipedia.
Oded
muitas respostas boas. O que eu entendi de longe é que se você está usando a função anônima, então você está trabalhando na linguagem lambda. é esse entendimento correto de como as linguagens lamda são diferentes de linguagens como java.
sushil bharwani,
4
"Eu estava lendo 'JavaScript: The Good Parts' e o autor mencionou que JavaScript é a primeira das linguagens lambda a ser lançada." Pesquisei idioma lambda no Google e encontrei esta pergunta em SO :)
Bugs Bunny

Respostas:

38

Nunca ouvi ninguém usar o termo "linguagem lambda", e as únicas definições plausíveis que posso pensar excluiriam o JavaScript como "a primeira".

Dito isso, suspeito que ele queira dizer:

  • Linguagens funcionais: uma classe de linguagens em que a computação é (ou pode ser) modelada como uma composição sem estado de funções (possivelmente de ordem superior). LISP, Scheme, ML, Haskell, etc. são frequentemente atribuídos a esta classe, embora vários deles sejam paradigmas mais propriamente mistos ou linguagens "opcionais funcionais". O Javascript contém indiscutivelmente os recursos necessários para tornar possível um "estilo funcional" de programação.
  • Linguagens que permitem a criação de funções anônimas (usando a functionsintaxe em JavaScript; isso é escrito lambdaem muitas linguagens, portanto, possivelmente, "linguagens lambda".

Ambos os usos são derivados do uso da letra grega lambda para denotar abstração de função no cálculo lambda, o modelo de computação desenvolvido por Alonzo Church e no qual a programação funcional é baseada.

Editar: olhou para o resultado do Google Livros --- "first to go mainstream"; bem, isso é discutível. Eu sugeri que o LISP foi em um ponto pelo menos razoavelmente popular. É um ponto justo, porém, a semântica do JavaScript é diretamente inspirada pelo Scheme e certamente atingiu um público maior do que qualquer outra linguagem que pode fazer afirmações semelhantes.

Derrick Turk
fonte
consulte o link postado por Lucas Jones no link do Google book, onde ele leva para a página exata da qual estou falando. obrigado pela sua resposta.
sushil bharwani,
5
O motivo pelo qual o JavaScript é descrito como 'o primeiro' é porque a instrução é qualificada como 'tornar-se mainstream'. Acho que está bem claro que o JavaScript é de fato a primeira linguagem de estilo funcional a ser usada por programadores do dia-a-dia em trabalhos do dia-a-dia.
rfunduk
1
o que você quer dizer quando fala em "estilo funcional" de linguagem de programação. Tenho experiência em java e estou tentando aprender javascript em que é diferente.
sushil bharwani,
9
É um grande tópico a ser explorado. No ano passado, eu estava onde você está agora: havia encontrado os ensaios e palestras de Crockford e queria entender os encerramentos. Eu recomendo que você comece com a Wikipedia, em seguida, vá para alguns ensaios: John Hughes "Por que a programação funcional é importante" scribd.com/doc/26902/whyfp , Slava Akhmechet "Programação funcional para o resto de nós" defmacro.org/ramblings /fp.html Existem muitos livros para expandir sua mente: verifique o Pequeno Esquema para ter uma ideia do Esquema e, em seguida, passe para Estrutura e Interpretação de Programas de Computador.
michiakig
5
@sushil: há muita literatura introdutória sobre o assunto. Em termos gerais, porém, é um estilo de programação que enfatiza o tratamento de programas como objetos matemáticos, em vez de instruções sequenciais ou interações entre objetos abstratos. Por exemplo, as linguagens funcionais preferem a recursão à iteração, fazem uso de estruturas de dados imutáveis ​​e usam funções de ordem superior em vez de "objetos de função" ou "padrões de estratégia". Funções de ordem superior significando funções que podem operar (como argumentos) ou produzir (como valores de retorno) outras funções.
Derrick Turk,
48

Uma linguagem lambda, em termos simples, é uma linguagem que permite passar uma função para outra função, onde a função é tratada como qualquer outra variável. Além disso, você deve ser capaz de definir esta função para ser passada anonimamente (ou embutida). PHP 5.3 adicionou suporte para funções lambda. JavaScript foi a primeira linguagem mainstream? Lisp foi amplamente utilizado em ambientes educacionais antes do JavaScript e também na personalização de nosso amado Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/

Aqui está um exemplo

function applyOperation(a, b, operation) {
  return operation(a,b);
}

function add(a,b) { return a+ b; }
function subtract(a,b) {return a - b;}

// Can be called like
applyOperation(1,2, add);
applyOperation(4,5, subtract);
// Anonymous inline function
applyOperation(4,7, function(a,b) {return a * b})

Como é diferente de C? Em C, você pode passar o ponteiro para funções, mas não pode defini-lo inline anonimamente.

Em Java (antes da versão 8), para obter o mesmo efeito, você deve passar um objeto que implementa uma interface, que na verdade pode ser definida anonimamente em linha.

Juan Mendes
fonte
1
"Lisp tem sido amplamente utilizado" por quem? Sempre soube disso, pois os professores sempre discutiam, mas na prática, nunca conheci ninguém que usasse o Lisp. Eu diria que qualquer pessoa poderia encontrar alguém que conheça que tenha usado Javascript, o que torna o Javascript muito mais "mainstream".
palswim
"PHP 5 adicionou suporte para funções lambda". Na verdade, era o PHP 5.3 que introduziu funções lambda.
Crozin,
Conheci poucas pessoas que o usavam em um contexto de negócios, mas, como Pascal já foi, ele é amplamente usado em ambientes educacionais.
Juan Mendes,
4

Ele se refere ao cálculo Lambda .

Lambda calculus, também escrito como λ-calculus, é um sistema formal para definição de função, aplicação de função e recursão. [...]

com o cálculo lambda não tipado sendo a inspiração original para a programação funcional, em particular Lisp, e o cálculo lambda digitado servindo como base para sistemas de tipo modernos.

BenoitParis
fonte
4

Eu vi um lambda definido como uma função anônima e como uma referência a uma função. Javascript oferece suporte a:

setTimeout(function(){ /* an anonymous function */ }, 100)

var f = function(){ /* function ref */ }

É aqui que o JS obtém muito poder e flexibilidade. O Java suporta o primeiro até certo ponto (implementações de interface anônima), mas não o último - veja abaixo a atualização do Java 8.

Não está claro para mim qual (ou ambas) dessas é a definição apropriada de lambda.

JS definitivamente não é a primeira linguagem a oferecer suporte a esses recursos. De memória, acho que é pequeno o fato de os entusiastas da linguagem sempre elogiarem o apoio a lambdas.

BTW: Em Java, uma classe anônima é geralmente usada para passar uma definição de classe rapidamente para um argumento (muito usada em swing). Algo assim (de memória, não compilado):

someGuiContainer(new WidgetInterface()
      {
           public void importantMethodToDefine(){
             // Handle having the method called in my special widget way
           }
        }
)

Atualizar

Java, a partir de 8, agora é oficialmente uma linguagem Lambda.

Agora você pode usar a seguinte sintaxe:

MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));

Código Fonte

mtyson
fonte
1

No curso aberto do MIT chamado estrutura e interpretação de programas de computador, um livro de Hal Abelson, Jerry Sussman e Julie Sussman. Eles discutem Scheme, que é um dialeto de LISP e lá eles explicam uma explicação muito detalhada e clara do que é lambda e Scheme LISP e linguagens em geral. Recomendo enfaticamente que você o leia se deseja ter um entendimento realmente claro e profundo de Programação de Computadores. Explicar para você levaria três vezes mais tempo do que se você fosse lá e apenas lesse o livro ou assistisse aos tutoriais que explicam perfeitamente, é genial.

Javascript é baseado principalmente na linguagem Scheme e em seu pai Lisp, e além disso, pegou sua estrutura lamda e se tornou mainstream com ela.

Max
fonte
0

Da wikipedia: Em linguagens de programação como Lisp e Python, lambda é um operador usado para denotar funções anônimas ou encerramentos, seguindo o uso do cálculo lambda. Um exemplo desse uso de lambda na linguagem Python é esta seção de código de computador que classifica uma lista em ordem alfabética pelo último caractere de cada entrada:

>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog']
>>> sorted(list, key=lambda word: word[-1])
['horse', 'plane', 'dog', 'woman', 'man', 'boat']

* In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements
r3nrut
fonte
0
  • JavaScript permite definir uma função anônima que é uma função que não está vinculada a um identificador. Essa função também é conhecida como Lambda Abstraction e, como o JS a suporta, é conhecida como Lambda Language.

  • Propriedades: Esta função é necessária em caso de execução imediata de uma função ou para uso a curto prazo, onde não há significado de dar nome à função.

  • É diferente de linguagens como Java, C, C ++ e PHP, pois as funções JS Anonymous são usadas para Closure e Currying.

MERLIN THOMAS
fonte