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 tripler1y 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 + ysignifica que fes una función que toma un parámetro int. El resultado de f x( faplicado a x) es una función que toma un parámetro int. El resultado f x y(o (f x) y, es decir, f xaplicado a y) es una expresión que no toma parámetros de entrada y se evalúa reduciendo x + y.