He estado leyendo artículos sobre programación funcional todos los días y he tratado de aplicar algunas prácticas tanto como sea posible. Pero no entiendo qué es único en el curry o la aplicación parcial.
Tome este código Groovy como ejemplo:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
No entiendo cuál es la diferencia entre tripler1
y tripler2
. ¿No son los dos iguales? El 'curry' es compatible con lenguajes funcionales puros o parciales como Groovy, Scala, Haskell, etc. Pero puedo hacer lo mismo (left-curry, right-curry, n-curry o aplicación parcial) simplemente creando otro nombre o anónimo función o cierre que reenviará los parámetros a la función original (como tripler2
) en la mayoría de los idiomas (incluso C.)
¿Me estoy perdiendo de algo? Hay lugares donde puedo usar el currículum y la aplicación parcial en mi solicitud de Grails, pero dudo en hacerlo porque me pregunto "¿Cómo es eso diferente?"
Por favor iluminame.
EDITAR: ¿Están diciendo que la aplicación / currículum parcial es simplemente más eficiente que crear / llamar a otra función que reenvía los parámetros predeterminados a la función original?
f x y = x + y
significa que f
es una función que toma un parámetro int. El resultado de f x
( f
aplicado a x
) es una función que toma un parámetro int. El resultado f x y
(o (f x) y
, es decir, f x
aplicado a y
) es una expresión que no toma parámetros de entrada y se evalúa reduciendo x + y
.