En la función de orden superior fold / reduce ¿cuál es el nombre, si lo hay, del argumento funcional?
Estoy trabajando en una biblioteca de procesamiento tabular monádico donde las filas se pliegan para producir análisis simples (como encontrar el mínimo, máximo, promedio de una columna). Por lo tanto, estoy buscando un nombre sólido para el argumento de la fold
función y cualquier nombre que esté bien establecido en la comunidad de ML (o Haskell o Common Lisp como segundo y tercer candidato) sería interesante.
Un nombre como f
es común en la descripción de fold
funciones, sin embargo, no es descriptivo y un nombre sería más adecuado.
terminology
functional-programming
naming
usuario40989
fuente
fuente
fold
Es una función de orden superior. El argumento para retirarse es solo eso, un argumentoRespuestas:
No sé si hay una sola respuesta a esto, como mencionó @jozefg. Y por pura pura especulación, aquí hay una posible explicación:
Sospecho que la razón es porque el tipo,
(a -> b -> b)
en Haskell'sfoldr
, por ejemplo, es más significativo que cualquier nombre que se le ocurra. Dado que los parámetrosa
yb
type podrían ser cualquier cosa , la función podría hacer casi cualquier cosa también. Así que uno se queda con nombres comofunction
,combiner
,morphism
, yargument
, que no son especialmente significativos tampoco. También podría usar un nombre corto y que no distraiga.Otro ejemplo es la
id :: a -> a
función: ¿cómo debe llamar a su argumento? Nuevamente, creo queid
el tipo es más descriptivo que su nombre de argumento.Sin embargo, estoy de acuerdo con usted, parece que debería haber un nombre común, tal vez en matemáticas. Espero que alguien pueda corregirme sobre esto.
Algunos ejemplos de su nombre en código real:
En las bibliotecas de Haskell , se llama principalmente
f
(y a vecesoperator
en los comentarios):También se llama
f
en Clojure :fuente
No estoy de acuerdo con la idea de que
f
es un mal nombre para el argumento de la funciónfold
. La razón por la que queremos nombres descriptivos en la programación es para que sepamos lo que el nombre describe, y el nombref
se usa comúnmente en matemáticas (y lenguajes de programación funcionales) para una función (como song
yh
).No sabemos casi nada
f
(por diseño, ya que si pudiéramos ser más específicos al respecto, no podríamos usarfold
tantas cosas), y el nombref
nos dice todo lo que necesitamos saber, excepto que es una función de dos argumentos. El nombref
es muy parecido al pronombre 'it' en inglés: es un marcador de posición que podría significar casi cualquier cosa. No sabemos qué es 'eso' hasta que lo usamos en una oración, y no sabemos quéf
es hasta que lo llamamosfold
.Al nombrar cosas, queremos obtener tanta información del nombre como sea posible, y preferimos que el nombre sea corto (si podemos obtenerlo sin sacrificar información importante). Aquí, tenemos un nombre muy corto que nos dice casi todo lo que sabemos al respecto. No creo que se pueda mejorar.
En la programación imperativa,
i
se usa como un contador de bucles (como estánj
yk
, si necesitamos más); en programación funcional,f
se utiliza para un argumento de función en funciones de orden superior (como estáng
yh
, si necesitamos más). No tengo suficiente experiencia con lenguajes funcionales para asegurarme de que la convención f / g / h esté tan bien establecida como la convención i / j / k, pero si no lo está, creo que debería estarlo (definitivamente es establecido en matemáticas).fuente
El nombre más común para esto que he escuchado que no sea el pronombre
f
seríabinary operation
obinary function
: el problema con ser más específico es que podría hacer literalmente cualquier cosa , y es por eso que las personas se adhieren a la firma de tipoa -> b -> a
(oa -> b -> b
si es el pliegue correcto) .Por lo tanto, le propongo que haga exactamente eso, se adhiera a la firma de tipo, por suerte esa firma de tipo específica tiene un nombre:
binary function
al igual quea -> a
es aunary operation
, ya -> b
es aunary function
, puede llamara -> a -> a
abinary operation
ya -> b -> c
abinary function
.fuente
binary operation
significaría mása -> a -> a
ybinary function
representaríaa -> b -> c
... la verdad seguramente está en el medio. :-)La función que solicita a veces se denomina "función de combinación" (consulte, por ejemplo, la página de HaskellWiki en Fold ), pero esto no es lo suficientemente común como para llamarla terminología estándar.
fuente