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 tripler1
e 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 + y
significa que f
é uma função que aceita um parâmetro int. O resultado de f x
( f
aplicado a x
) é uma função que aceita um parâmetro int. O resultado f x y
(ou (f x) y
seja, f x
aplicado a y
) é uma expressão que não aceita parâmetros de entrada e é avaliada pela redução x + y
.