Na função de ordem superior, dobre / reduza qual é o nome, se houver, do argumento funcional?
Estou trabalhando em uma biblioteca de processamento tabular monádico onde as linhas são dobradas para produzir análises simples (como encontrar a média mínima, máxima e média de uma coluna). Estou, portanto, procurando um nome sólido para o argumento da fold
função e qualquer nome que esteja bem estabelecido na comunidade de ML (ou Haskell ou Common Lisp como segundo e terceiro candidatos) seria interessante.
Um nome como f
é comum na descrição de fold
funções, porém é descritivo e um substantivo seria mais adequado.
terminology
functional-programming
naming
user40989
fonte
fonte
fold
é uma função de ordem superior. O argumento para desistir é apenas isso, um argumentoRespostas:
Não sei se há uma resposta única para isso, como o @jozefg mencionou. E tão puramente por especulação, aqui está uma explicação possível:
Eu suspeito que o motivo é porque o tipo -
(a -> b -> b)
no de Haskellfoldr
, por exemplo - é mais significativo do que qualquer nome que alguém possa inventar. Como os parâmetrosa
eb
type podem ser qualquer coisa , a função também pode fazer praticamente qualquer coisa. Então, você é deixado com nomes comofunction
,combiner
,morphism
, eargument
, que não são especialmente significativo tanto. É melhor usar um nome curto e não distraído.Outro exemplo é a
id :: a -> a
função: como você deve chamar esse argumento? Mais uma vez, acho queid
o tipo é mais descritivo do que o nome do argumento.No entanto, eu concordo com você - parece que deveria haver um nome comum, talvez em matemática. Espero que alguém possa me corrigir nisso.
Alguns exemplos de seu nome em código real:
Nas bibliotecas de Haskell , é chamado principalmente
f
(e às vezesoperator
nos comentários):Também é chamado
f
em Clojure :fonte
Eu discordo da idéia de que
f
é um nome ruim para o argumento da funçãofold
. A razão pela qual queremos nomes descritivos na programação é para sabermos o que o nome descreve, e o nomef
é comumente usado em matemática (e linguagens de programação funcionais) para uma função (como sãog
eh
).Não sabemos quase nada sobre isso
f
(por design, pois se pudéssemos ser mais específicos sobre o assunto, não poderíamos usá-lofold
em tantas coisas), e o nomef
nos diz tudo o que precisamos saber, exceto que é uma função de dois argumentos. O nomef
é muito parecido com o pronome 'it' em inglês - é um espaço reservado que pode significar quase qualquer coisa. Nós não sabemos o que é 'até usá-lo em uma frase e não sabemos o quef
é até chamarmosfold
.Ao nomear coisas, queremos obter o máximo possível de informações do nome e preferimos que o nome seja curto (se conseguirmos isso sem sacrificar informações importantes). Aqui, temos um nome muito curto que nos diz quase tudo o que sabemos sobre ele. Eu não acho que isso possa ser melhorado.
Na programação imperativa,
i
é usado como um contador de loop (como sãoj
ek
, se precisarmos de mais); na programação funcional,f
é usado para um argumento de função em funções de ordem superior (como sãog
eh
, se precisarmos de mais). Não tenho experiência suficiente com linguagens funcionais para garantir que a convenção f / g / h seja tão bem estabelecida quanto a convenção i / j / k, mas se não for, acho que deveria ser (definitivamente é estabelecido em matemática).fonte
O nome mais comum para isso que já ouvi falar que
f
não seja o pronome seriabinary operation
oubinary function
- o problema de ser mais específico do que isso é poderia fazer literalmente qualquer coisa , e é por isso que as pessoas mantêm a assinatura de tipoa -> b -> a
(oua -> b -> b
se estiver dobra à direita) .Então, proponho que você faça exatamente isso, atenha-se à assinatura de tipo, felizmente essa assinatura de tipo específica tem um nome:,
binary function
assim comoa -> a
é aunary operation
, ea -> b
é aunary function
, você pode chamara -> a -> a
abinary operation
ea -> b -> c
abinary function
.fonte
binary operation
, mais significariaa -> a -> a
ebinary function
representariaa -> b -> c
... a verdade certamente está no meio. :-)A função que você solicita às vezes é chamada de "função combinada" (veja, por exemplo, a página do HaskellWiki no Fold ), mas isso não é suficientemente comum para chamar de terminologia padrão.
fonte