Alguém poderia fornecer uma boa descrição do que é um Lambda? Temos uma tag para eles e eles estão nos segredos da questão do C #, mas ainda não encontrei uma boa definição e explicação do que eles são.
Alguém poderia fornecer uma boa descrição do que é um Lambda? Temos uma tag para eles e eles estão nos segredos da questão do C #, mas ainda não encontrei uma boa definição e explicação do que eles são.
Respostas:
Fechamentos, lambdas e funções anônimas não são necessariamente a mesma coisa.
Uma função anônima é qualquer função que não tem (ou, pelo menos, precisa) seu próprio nome.
Um encerramento é uma função que pode acessar variáveis que estavam em seu escopo léxico quando foi declarada, mesmo depois de terem saído do escopo. As funções anônimas não precisam ser necessariamente encerramentos, mas são na maioria das linguagens e se tornam menos úteis quando não são.
Um lambda não é ... tão bem definido no que diz respeito à ciência da computação. Muitas línguas nem usam o termo; em vez disso, eles apenas os chamarão de encerramentos ou funções anônimas ou inventarão sua própria terminologia. No LISP, um lambda é apenas uma função anônima. Em Python, um lambda é uma função anônima limitada especificamente a uma única expressão; qualquer coisa a mais, e você precisa de uma função nomeada. Lambdas são encerramentos em ambas as línguas.
Também chamados de encerramentos ou funções anônimas .. Encontrei a melhor descrição aqui . Basicamente, um bloco de código embutido que pode ser passado como um argumento para uma função.
"Lambda" refere-se ao Cálculo Lambda ou a uma expressão lambda específica. O cálculo lambda é basicamente um ramo da lógica e da matemática que lida com funções e é a base das linguagens de programação funcional .
~ William Riley-Land
É apenas uma função anônima declarada embutida, geralmente atribuída a um delegado quando você não deseja escrever uma função completa.
Em linguagens como lisp / scheme, eles costumam ser transmitidos de maneira bastante liberal como parâmetros de função, mas o idioma em C # normalmente encontra lambdas usados apenas para avaliação preguiçosa de funções, como em linq, ou para tornar o código de manipulação de eventos um pouco mais complexo.
Não existe realmente algo como 'um lambda' na programação. Depende do idioma, etc.
Resumindo, normalmente uma linguagem que 'tem lambdas' usa o termo para funções anônimas ou, em alguns casos, fechamentos. Assim, em Ruby:
f = lambda { return "this is a function with no name" }
puts f.call
Em resposta às respostas anteriores:
-O importante sobre funções anônimas não é que elas não exijam um nome.
-Fechos são um conceito separado.
-Um artigo gigante da Wikipedia não está deixando isso mais claro.
Aqui está minha resposta em 3 partes:
1. Um lambda é uma função que também é uma expressão. Isso é o importante.
2. Muitas linguagens que implementam os chamados "lambdas" adicionam um pouco de açúcar sintático para tornar a escrita dessas funções curtas mais fácil e rápida, mas isso não é obrigatório.
3. Alguns idiomas podem exigir que um lambda não tenha efeitos colaterais . Isso seria um lambda mais puro no sentido funcional.
Quando uma função é uma expressão, é um "cidadão de primeira classe" dentro da linguagem. Posso fazer todas as coisas importantes com ele:
x = lambda(){ return "Hello World"; }
doit( 1, 2, lambda(a,b){ return a > b; }, 3 )
x = (lambda(a){ return a+1; }) + 5 // type error, not syntax error
(lambda(a,b){ print(a); log(b); })( 1, 2 ) // () is valid operator here
Recortado da wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word
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.