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.

Foi útil?

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:

http://github.com /richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#L1096

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top