O que é um Lambda?
-
02-07-2019 - |
Pergunta
Alguém poderia fornecer uma boa descrição do que um Lambda é? Temos uma tag para eles e eles estão sobre os segredos de C pergunta #, mas eu ainda tenho que encontrar uma definição boa e explicação do que eles estão em primeiro lugar.
Solução
Closures, 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, necessidade) o seu próprio nome.
Um fechamento é uma função que as variáveis ??de acesso pode que estavam em seu escopo lexical quando foi declarada, mesmo depois de terem caído a do escopo. funções anônimas não têm necessariamente de ser encerramentos, mas eles são na maioria das linguagens e tornar-se um pouco menos útil quando eles não são.
A lambda é .. não tão bem definida, tanto quanto a ciência da computação vai. Um monte de idiomas nem sequer usar o termo; em vez disso, só vai chamá-los de encerramentos ou funções Anon ou inventar a sua própria terminologia. Em LISP, um lambda é apenas uma função anônima. Em Python, um lambda é uma função anónima especificamente limitado a uma única expressão; mais nada, e você precisa de uma função chamada. Lambdas são fechamentos em ambas as línguas.
Outras dicas
Também chamado de encerramentos ou funções anônimas .. Eu encontrei a melhor descrição aqui . Basicamente, bloco de linha de código que pode ser passado como um argumento para uma função.
"Lambda" refere-se ao Lambda Calculus ou para uma expressão específica lambda. Lambda cálculo é basicamente um ramo da lógica e da matemática que lida com funções, e é a base da linguagens funcionais de programação .
~ William Riley-Land
É apenas uma função anônima declarada em linha, mais tipicamente atribuído a um delegado quando você não quer escrever uma função de pleno direito.
Em linguagens como Lisp / esquema, eles são muitas vezes passadas ao redor bastante liberalmente como parâmetros de função, mas a linguagem em C # normalmente encontra lambdas usados ??apenas para avaliação preguiçosa de funções, como em LINQ, ou para fabricar de manipulação de eventos código de um bit terser.
Não há realmente tal coisa a como 'um lambda' na programação. Depende da linguagem, etc.
Em suma, normalmente uma linguagem que 'tem lambdas' usa o termo para funções anônimas ou, em alguns casos, encerramentos. Como assim, em Ruby:
f = lambda { return "this is a function with no name" }
puts f.call
Em resposta às respostas anteriores:
-A coisa importante sobre funções anônimas não é que eles não exigem um nome.
-Closures são um conceito separado.
-A gigantesca wikipedia artigo não está fazendo isso mais claro.
Aqui está a minha resposta em 3 partes:
1. Um lambda é uma função que também é uma expressão. Esta é a coisa importante.
2. Muitas línguas que implementam as chamadas "lambdas" adicionar um pouco de açúcar sintático para tornar a escrita destas funções curtas mais fácil e mais rápido, mas isso não é necessário.
3. Algumas línguas podem exigir que um lambda tem sem efeitos colaterais . Isso seria um lambda mais pura, no sentido funcional.
Quando uma função é uma expressão, é um "cidadão de primeira classe" dentro da linguagem. Posso todas as coisas importantes com ela:
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 de wikipedia: http://en.wikipedia.org/wiki/Lambda # Lambda.2C_the_word
Em linguagens como Lisp e Python programação, lambda é um operador usado para denotar funções ou encerramento anônimos, seguindo o uso de lambda calculus.