funções lambda anônimas (programação funcional)


10

O que são funções anônimas (lambda)? Qual é a definição formal de uma função anônima em uma linguagem de programação funcional?

Em meus termos simples, quando estou programando no esquema / lisp, eu diria que uma função anônima (lambda) é uma função que não está vinculada a um identificador.

É tudo o que você pode dizer formalmente sobre uma função lambda? Eu acho que há mais detalhes que podem ser adicionados a essa definição simples. Por favor, elabore e obrigado!


Respostas:


10

Na minha opinião, é tudo o que você pode realmente dizer sobre eles.

A ideia é que, em uma linguagem de ordem superior, uma função seja apenas outro tipo de valor. Da mesma maneira que você pode ter (3 + 4) sem um identificador em C, você pode ter (lambda (x) + (3 x))) sem um identificador no esquema.

A chave aqui não é que exista algo de especial em funções anônimas. São apenas as restrições de outros idiomas que exigem que as funções sejam tratadas de maneira diferente de qualquer outro valor. As definições especiais são para linguagens procedurais que não as permitem, não para linguagens funcionais com do.


11

No cálculo lambda, todas as funções (termos) são anônimas. Essa é uma propriedade essencial do cálculo lambda: você pode compor funções complexas a partir de funções mais simples sem dar nomes a elas.

Nas linguagens de programação, na maioria dos casos é desejável atribuir nomes às funções, porque é assim que pensamos e torna o código legível para humanos. Mas a compilação eventualmente remove os nomes ao produzir um executável (se desconsiderarmos as informações de depuração).

Se uma linguagem permite expressar funções anônimas (ou seja, funções sem nomes), pode oferecer uma vantagem para programadores e compiladores: os programadores geralmente escrevem código mais curto e os compiladores podem otimizar melhor, sabendo que uma função anônima é usada apenas no momento especificado. coloque e não em nenhum outro lugar.


1

Depende de qual parte da sua pergunta você coloca a ênfase. Se é especificamente a propriedade de ser anônimo para funções anônimas, na verdade a única resposta é que eles são valores não acoplados . Se você está falando sobre funções em geral, funções anônimas são provavelmente a manifestação mais visível do uso do cálculo lambda em um ambiente funcional, para linguagens de aplicação .

De fato, do ponto de vista do cálculo lambda, as expressões lambda são a construção sintática usada para criar ligações. Lembre-se da notação usada no cálculo lambda:

λf.λx.fx

fxfx

Uma linguagem geralmente oferece maneiras, como let(ML como linguagens, esquema) ou define(esquema) para criar ligações utilizáveis ​​no nível superior (ou dentro de construções sintáticas mais complexas que funções, como módulos ou objetos), mas a única ferramenta necessária para ligações é o lambda em níveis mais baixos.

Se você observar idiomas como dialetos de esquema ou lisp, a base deles é o cálculo lambda, e muitas formas especiais são realmente lambdas revestidas de açúcar.

Para idiomas concatenativos , a história é um pouco diferente. Lambdas não são necessárias e, na verdade, contraproducentes. Qual é o sentido de definir lambdas anônimas, quando tudo é uma função ?

De alguma forma, existe uma dualidade entre esses dois tipos de manobras. O último é focado na combinação de funções sem pontos e, portanto, tenta representar tudo como funções, enquanto o primeiro trabalha em um cálculo mais elaborado e faz um esforço para ter funções como valores de primeira classe, como quaisquer outros valores da linguagem. A esse respeito, podia-se ver lambdas como resultado desse esforço.

Alguns ponteiros sobre o tópico foram introduzidos (mal) nesta resposta:

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.