Eu tenho lido artigos sobre programação funcional todos os dias e tentado aplicar algumas práticas o máximo possível. Mas não entendo o que é único no curry ou na aplicação parcial.
Tome este código Groovy como um exemplo:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Eu não entendo qual é a diferença entre tripler1e tripler2. Eles não são os mesmos? O 'currying' é suportado em linguagens funcionais puras ou parciais, como Groovy, Scala, Haskell, etc. função ou fechamento que encaminhará os parâmetros para a função original (como tripler2) na maioria dos idiomas (até C.)
Estou faltando alguma coisa aqui? Há lugares em que posso usar curry e aplicação parcial no meu aplicativo Grails, mas hesito em fazê-lo porque estou me perguntando "Qual é a diferença?"
Por favor me esclareça.
EDIT: Vocês estão dizendo que aplicação parcial / currying é simplesmente mais eficiente do que criar / chamar outra função que encaminha parâmetros padrão para a função original?
f x y = x + ysignifica que fé uma função que aceita um parâmetro int. O resultado de f x( faplicado a x) é uma função que aceita um parâmetro int. O resultado f x y(ou (f x) yseja, f xaplicado a y) é uma expressão que não aceita parâmetros de entrada e é avaliada pela redução x + y.