J'ai lu des articles sur la programmation fonctionnelle tous les jours et j'ai essayé d'appliquer autant que possible certaines pratiques. Mais je ne comprends pas ce qui est unique au curry ou en application partielle.
Prenez ce code Groovy comme exemple:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Je ne comprends pas quelle est la différence entre tripler1
et tripler2
. Ne sont-ils pas tous les deux les mêmes? Le 'currying' est supporté dans des langages fonctionnels purs ou partiels comme Groovy, Scala, Haskell etc. Mais je peux faire la même chose (curry gauche, curry droit, curry n ou application partielle) en créant simplement un autre nommé ou anonyme fonction ou fermeture qui transmettra les paramètres à la fonction d'origine (comme tripler2
) dans la plupart des langues (même C.)
Est-ce que j'ai râté quelque chose? Il y a des endroits où je peux utiliser le curry et l'application partielle dans mon application Grails mais j'hésite à le faire parce que je me demande "En quoi est-ce différent?"
Veuillez m'éclairer.
EDIT: Êtes-vous en train de dire que l'application / le curry partiel est tout simplement plus efficace que de créer / appeler une autre fonction qui transmet les paramètres par défaut à la fonction d'origine?
f x y = x + y
signifie que f
c'est une fonction qui prend un paramètre int. Le résultat de f x
( f
appliqué à x
) est une fonction qui prend un paramètre int. Le résultat f x y
(ou (f x) y
, c'est- f x
à- dire appliqué à y
) est une expression qui ne prend aucun paramètre d'entrée et est évaluée en réduisant x + y
.