Para uma pessoa sem formação em ficção científica, o que é uma lambda no mundo da Ciência da Computação?
lambda
language-agnostic
computer-science
terminology
theory
Brian Warshaw
fonte
fonte
Respostas:
O Lambda é derivado do Cálculo do Lambda e refere-se a funções anônimas na programação.
Por que isso é legal? Ele permite que você escreva funções de descarte rápido sem nomeá-las. Ele também fornece uma boa maneira de escrever fechamentos. Com esse poder, você pode fazer coisas assim.
Pitão
Como você pode ver no snippet do Python, o adicionador de função recebe um argumento x e retorna uma função anônima, ou lambda, que usa outro argumento y. Essa função anônima permite criar funções a partir de funções. Este é um exemplo simples, mas deve transmitir a potência que os lambdas e os fechamentos têm.
Exemplos em outros idiomas
Perl 5
Javascript
JavaScript (ES6)
Esquema
C # 3.5 ou superior
Rápido
PHP
Haskell
Java veja este post
Lua
Kotlin
Rubi
Ruby é um pouco diferente, pois você não pode chamar um lambda usando exatamente a mesma sintaxe que chamar uma função, mas ainda possui lambdas.
Ruby sendo Ruby, existe uma abreviação para lambdas, então você pode definir
adder
desta maneira:R
fonte
Um lambda é um tipo de função definida em linha. Juntamente com um lambda, você também costuma ter algum tipo de variável que pode conter uma referência a uma função, lambda ou de outra forma.
Por exemplo, aqui está um código C # que não usa um lambda:
Isso chama a Calculadora, transmitindo não apenas dois números, mas qual método chamar dentro da Calculadora para obter os resultados do cálculo.
No C # 2.0, temos métodos anônimos, que reduzem o código acima para:
E então, no C # 3.0, temos lambdas, o que torna o código ainda mais curto:
fonte
Op
, pode-se simplesmente usarFunc<int, int>
Console.WriteLine("Calculator: op " + op.Method.Name + " (" + a + ", " + b + ") = " + op(a, b));
o primeiro exemplo.O nome "lambda" é apenas um artefato histórico. Estamos falando apenas de uma expressão cujo valor é uma função.
Um exemplo simples (usando Scala para a próxima linha) é:
onde o argumento para o
foreach
método é uma expressão para uma função anônima. A linha acima é mais ou menos a mesma coisa que escrever algo assim (código não muito real, mas você entenderá):exceto que você não precisa se preocupar com:
Depois que você estiver acostumado a funcionar com valores, ficar sem eles parece tão tolo quanto precisar nomear todas as expressões, como:
em vez de apenas escrever a expressão onde você precisar:
A notação exata varia de idioma para idioma; Grego nem sempre é necessário! ;-)
fonte
Refere-se ao cálculo lambda , que é um sistema formal que apenas possui expressões lambda, que representam uma função que utiliza uma função para seu único argumento e retorna uma função. Todas as funções no cálculo lambda são desse tipo, ou seja
λ : λ → λ
,.Lisp usou o conceito lambda para nomear seus literais de função anônimos. Este lambda representa uma função que recebe dois argumentos, xey, e retorna seu produto:
Pode ser aplicado em linha assim (avalia para 50 ):
fonte
λ : λ -> λ
é confuso (e inválido, na verdade).O cálculo lambda é uma teoria matemática consistente de substituição. Na matemática da escola, vê-se, por exemplo,
x+y=5
emparelhadox−y=1
. Juntamente com as formas de manipular equações individuais, também é possível reunir as informações dessas duas, desde que as substituições de equações cruzadas sejam feitas logicamente. O cálculo Lambda codifica a maneira correta de fazer essas substituições.Dado que
y = x−1
é um rearranjo válido da segunda equação, isso:λ y = x−1
significa uma função que substitui os símbolosx−1
pelo símboloy
. Agora imagine aplicarλ y
a cada termo na primeira equação. Se um termo fory
, execute a substituição; caso contrário, não faça nada. Se você fizer isso no papel, verá como a aplicação dissoλ y
tornará a primeira equação solucionável.Essa é uma resposta sem qualquer ciência da computação ou programação.
O exemplo de programação mais simples que consigo pensar vem de http://en.wikipedia.org/wiki/Joy_(programming_language)#How_it_works :
Adicionado: http://imgur.com/a/XBHub
fonte
Ligeiramente simplificado: uma função lambda é aquela que pode ser passada para outras funções e é acessada pela lógica.
No C #, a sintaxe lambda geralmente é compilada para métodos simples da mesma maneira que os delegados anônimos, mas também pode ser dividida e sua lógica lida.
Por exemplo (em C # 3):
O LinqToSql pode ler essa função (x> 15) e convertê-la no SQL real para executar usando árvores de expressão.
A afirmação acima se torna:
Isso é diferente dos métodos normais ou dos delegados anônimos (que são apenas magias do compilador), porque eles não podem ser lidos .
Nem todos os métodos em C # que usam sintaxe lambda podem ser compilados para árvores de expressão (ou seja, funções reais lambda). Por exemplo:
Agora a árvore de expressão não pode ser lida - SomeComplexCheck não pode ser dividido. A instrução SQL será executada sem o where e todas as linhas dos dados serão inseridas
SomeComplexCheck
.As funções Lambda não devem ser confundidas com métodos anônimos. Por exemplo:
Isso também tem uma função 'inline', mas desta vez é apenas mágica do compilador - o compilador C # dividirá isso em um novo método de instância com um nome gerado automaticamente.
Os métodos anônimos não podem ser lidos e, portanto, a lógica não pode ser traduzida como nas funções lambda.
fonte
Gosto da explicação de Lambdas neste artigo: A evolução do LINQ e seu impacto no design de c # . Isso fez muito sentido para mim, pois mostra um mundo real para Lambdas e o constrói como um exemplo prático.
Sua rápida explicação: Lambdas são uma maneira de tratar código (funções) como dados.
fonte
Um exemplo de lambda em Ruby é o seguinte:
Irá gerar a seguinte saída:
fonte
@ Brian Eu uso lambdas o tempo todo em C #, em operadores LINQ e não LINQ. Exemplo:
Antes do C #, eu usava funções anônimas em JavaScript para retornos de chamada para funções AJAX, antes do termo Ajax ser cunhado:
O interessante da sintaxe lambda do C #, porém, é que, por si só, seu tipo não pode ser inferido (ou seja, você não pode digitar var foo = (x, y) => x * y), mas dependendo de qual tipo eles são atribuídos a eles, eles serão compilados como delegados ou árvores de sintaxe abstrata que representam a expressão (é assim que os mapeadores de objetos LINQ fazem sua mágica "integrada ao idioma").
Lambdas no LISP também podem ser passadas para um operador de cotação e depois percorridas como uma lista de listas. Algumas macros poderosas são criadas dessa maneira.
fonte
A pergunta é formalmente respondida bastante, por isso não tentarei acrescentar mais sobre isso.
Em palavras muito simples e informais para alguém que sabe muito pouco ou nada sobre matemática ou programação, eu explicaria isso como uma pequena "máquina" ou "caixa" que recebe alguma entrada, faz algum trabalho e produz alguma saída, sem nome específico , mas sabemos onde está e, justamente por esse conhecimento, nós o usamos.
Na prática, para uma pessoa que sabe o que é uma função, eu diria a ela que é uma função que não tem nome, geralmente colocada em um ponto na memória que pode ser usado apenas fazendo referência a essa memória (geralmente através do uso de uma variável - se eles ouviram falar sobre o conceito de ponteiros de função, eu os usaria como um conceito semelhante) - esta resposta cobre os princípios básicos (sem menção de fechamentos etc.), mas é possível entender o ponto facilmente.
fonte
Você pode pensar nisso como uma função anônima - eis mais algumas informações: Wikipedia - Função Anônima
fonte
Só porque não consigo ver um exemplo de C ++ 11 aqui, vou adiante e postarei este bom exemplo daqui . Após a pesquisa, é o exemplo específico de idioma mais claro que eu pude encontrar.
Olá, Lambdas, versão 1
Olá, Lambdas, versão 2:
fonte
Tenho problemas para entender expressões lambda porque trabalho no Visual FoxPro, que possui substituição de macro e as funções ExecScript {} e Evaluate (), que parecem servir ao mesmo propósito.
Um benefício definitivo do uso de lambdas formais é (presumo) a verificação em tempo de compilação: a Fox não saberá se você digitar a sequência de texto acima até tentar executá-la.
Isso também é útil para código orientado a dados: você pode armazenar rotinas inteiras em campos de memorando no banco de dados e apenas avaliá-las em tempo de execução. Isso permite que você ajuste parte do aplicativo sem realmente ter acesso à fonte. (Mas esse é outro tópico completamente.)
fonte
Ilustrarei intuitivamente passo a passo em códigos python simples e legíveis.
Em resumo, um lambda é apenas uma função anônima e inline.
Vamos começar da tarefa de entender
lambdas
como um calouro com conhecimentos básicos de aritmética.O plano de atribuição é 'o nome = valor', consulte:
'x', 'y' são nomes e 1, 'valor' são valores. Tente uma função em matemática
Relatórios de erro,
você não pode escrever uma matemática diretamente como código, 'n' deve ser definido ou atribuído a um valor.
Funciona agora, e se você insistir em combinar as duas linhas seperarte em uma. Lá vem
lambda
Nenhum erro relatado.
Este é um relance
lambda
, permite que você escreva uma função em uma única linha, como na matemática diretamente no computador.Veremos mais tarde.
Vamos continuar a aprofundar a tarefa.
Como ilustrado acima, o símbolo de igual
=
funciona para o tipo de dados simples (1 e 'valor') e expressão simples (n ** 2 + 2 * n + 1).Tente o seguinte:
Funciona para instruções simples, existem 11 tipos delas no python 7. Instruções simples - documentação do Python 3.6.3
Que tal declaração composta,
Aí vem
def
habilitá-lo a trabalharTada, analise, 'm' é o nome, 'n ** 2 + 2 * n + 1' é o valor.
:
é uma variante de '='.Encontre, se apenas para entender, tudo começa com a atribuição e tudo é atribuição.
Agora retorne a
lambda
, temos uma função chamada 'm'Tentar:
Existem dois nomes de 'm' aqui, a função
m
já tem um nome, duplicado.Está formatando como:
Não é uma estratégia inteligente, então os relatórios de erros
Temos que excluir um deles, definir uma função sem nome.
É chamado de 'função anônima'
Em conclusão,
lambda
em uma função embutida que permite escrever uma função em uma linha reta, como na matemáticalambda
é anônimoEspero que isto ajude.
fonte
É uma função que não tem nome. Por exemplo, em c #, você pode usar
para retornar os números maiores que 5.
é a parte lambda aqui. Representa uma função que pega um parâmetro (número) e retorna um valor booleano (número> 5). O método GetMatchingItems usa esse lambda em todos os itens da coleção e retorna os itens correspondentes.
fonte
Em Javascript, por exemplo, as funções são tratadas como o mesmo tipo misto como tudo o resto (
int
,string
,float
,bool
). Como tal, você pode criar funções em tempo real, atribuí-las a coisas e chamá-las de volta mais tarde. É útil, mas não é algo que você deseja usar em excesso ou confundirá todos que precisam manter seu código depois de você ...Este é um código com o qual eu estava jogando para ver a profundidade dessa toca de coelho:
fonte
No contexto do CS, uma função lambda é um conceito matemático abstrato que aborda um problema de avaliação simbólica de expressões matemáticas. Nesse contexto, uma função lambda é igual a um termo lambda .
Mas nas linguagens de programação é algo diferente. É um pedaço de código declarado "no lugar" e que pode ser passado como um "cidadão de primeira classe". Esse conceito pareceu ser útil para que ele chegasse a quase todas as linguagens de programação modernas populares (consulte as funções lambda em todo lugar)
fonte
Vamos ver como o Lambda (Closure) funciona no Swift 4.2 com o método classificado () - da função normal até a expressão mais curta:
1. Função Normal
2. Expressão de encerramento
3. Expressão de fechamento embutido
4. Inferindo Tipo do Contexto
5. Retornos implícitos de fechamentos de expressão única
6. Nomes de argumentos abreviados
7. Métodos do Operador
Espero que isto ajude.
fonte
Eu também entendi. Eu tentei em JS com este:
Ele adiciona 2 a 4 e depois reduz o resultado por 6. No entanto, às vezes acho difícil ler :(
Também criei uma função forEach interessante:
forEach ([1,2,3,4,5]) (console.log);
Esse método itera uma matriz e executa uma ação - no caso, imprimindo no console. Agora eu também entendo por que os labmdas são poderosos.
fonte
Na programação de computadores, lambda é um pedaço de código (declaração, expressão ou um grupo deles) que recebe alguns argumentos de uma fonte externa. Nem sempre deve ser uma função anônima - temos várias maneiras de implementá-las.
Temos uma separação clara entre expressões, afirmações e funções, que os matemáticos não possuem.
A palavra "função" na programação também é diferente - nós temos "função é uma série de etapas a serem executadas" (do latim "executar"). Em matemática, é algo sobre correlação entre variáveis.
Linguagens funcionais estão tentando ser o mais semelhante possível às fórmulas matemáticas, e suas palavras significam quase o mesmo. Mas em outras linguagens de programação, temos diferentes.
fonte
A pergunta foi respondida completamente, não quero entrar em detalhes. Quero compartilhar o uso ao escrever computação numérica com ferrugem.
Há um exemplo de lambda (função anônima)
Quando eu escrevia um módulo do método Newton-Raphson, ele era usado como derivada de primeira e segunda ordem. (Se você quiser saber o que é o método Newton – Raphson, visite " https://en.wikipedia.org/wiki/Newton%27s_method ".
A saída como a seguinte
fonte
Imagine que você tem um restaurante com uma opção de entrega e um pedido que precisa ser feito em menos de 30 minutos. O ponto é que os clientes geralmente não se importam se você envia comida de bicicleta com o carro ou com os pés descalços, desde que mantenha a refeição quente e amarrada. Então, vamos converter esse idioma para Javascript com funções de transporte definidas e anônimas.
Abaixo, definimos a forma de entrega, ou seja, definimos um nome para uma função:
E se usássemos funções arrow / lambda para realizar essa transferência:
Você vê que não há diferença para o cliente e não há perda de tempo para pensar em como enviar comida. Apenas envie.
Aliás, eu não recomendo o kebap com coca-cola, é por isso que os códigos superiores causam erros. Diverta-se.
fonte