O que é este “padrão” funcional chamado?
-
22-07-2019 - |
Pergunta
Eu estava brincando com alguma programação funcional quando me deparei com a necessidade para esta função, porém eu não sei o que esse tipo de coisa é chamado de nomenclatura padrão. Qualquer pessoa reconhece isso?
function WhatAmIDoing(args...)
return function()
return args
end
end
Editar: generalizada da função, é preciso uma quantidade variável de argumentos (ou talvez uma lista implícita) e retorna uma função que, quando chamado retorna todos os argumentos, algo como um caril ou picles, mas não parece ser qualquer um.
Solução
WhatAmIDoing é um de ordem superior função porque é uma função que retorna outra função.
A coisa que ela retorna é um conversão - um fecho criado para computação atraso do valor atual. Normalmente thunks são criados para avaliar preguiçosamente uma expressão (e possivelmente memoize-lo), mas em outros casos, uma função é simplesmente necessário no lugar de um valor nua, como no caso de "constantly 5
", que em algumas línguas retorna uma função que sempre retorna 5.
Este último pode aplicar no exemplo dado, porque assumindo os avalia de idioma no aplicativo-ordem (ou seja Avalia argumentos antes de chamar uma função), a função não serve a nenhum outro propósito além de transformar os valores em uma função que retorna-los.
WhatAmIDoing é realmente uma implementação da função "constantemente" eu estava descrevendo. Mas, em geral, você não tem que retornar apenas args
na função interna. Você poderia retornar "ackermann(args)
", o que poderia levar um longo tempo, como em ...
function WhatAmIDoing2(args...)
return function()
return ackermann(args)
end
end
Mas WhatAmIDoing2 iria retornar imediatamente porque a avaliação da função de Ackermann seria suspensa no fechamento de um . (Sim, mesmo em uma linguagem chamada por valor.)
Outras dicas
Na programação funcional uma função que leva uma outra função como um argumento ou retorna outra função é chamada de superior que função de ordem .
Eu diria que XXXX retorna um fechamento da função sem nome ligado nos valores de x, y e z.
Este wikipedia artigo pode lançar alguma luz
Currying é sobre transformar uma função a uma cadeia de funções, cada um levando apenas um parâmetro e retornando outra tal função. Assim, este exemplo não tem relação com currying.
Decapagem é um termo usualmente utilizado para denotar algum tipo de serialização. Talvez para armazenar um objeto construído a partir de vários valores.
Se o interessante aspecto para você é que a função retornou pode acessar os argumentos da função XXXX, então eu iria com Remo.D.
Como já foi dito, é um de ordem superior função . Como você tem "padrão" na sua pergunta, eu pensei que eu ia acrescentar que esse recurso de linguagens funcionais é muitas vezes modelado usando o estratégia padrão em línguas sem funções de ordem superior.
Algo muito semelhante é chamado constantly
em Clojure:
Somente a função que constantly
retornos leva uma quantidade arbitrária de argumentos, tornando-o mais geral (e flexível) do que o seu padrão.
Eu não sei se este padrão tem um nome, mas iria utilizá-lo nos casos em que normalmente são esperados funções, mas tudo que eu cuidar é que um determinado valor é retornado:
(map (constantly 9) [1 2 3])
=> (9 9 9)
Basta saber, o que você usa isso?
Um delegado?
Basicamente você está retornando uma função ?? ou a saída de uma função?
Não entendeu, desculpe ...