Mediaspace scheduled maintenance: Aug 25, 2026 07:00 - 12:00 AM. During this time, videos will be temporarily unavailable. Check status updates.
En informatique, plus précisément en programmation fonctionnelle, la curryfication est la transformation d'une fonction à plusieurs arguments en une fonction à un argument qui retourne une fonction sur le reste des arguments. L'opération inverse est possible et s'appelle la décurryfication. Le terme vient du nom du mathématicien américain Haskell Curry, bien que cette opération ait été introduite pour la première fois par Moses Schönfinkel. Considérons une fonction add qui prend deux arguments (x et y) et en renvoie la somme. En la curryfiant, on obtient une fonction addcur qui prend un argument et renvoie une fonction qui prend le deuxième argument. En pseudo-langage : curry (add (x,y)) → addcur x → lambda (y → x + y) La curryfication permet l'application partielle : si on appelle la fonction curryfiée avec l'argument 3, on récupère une fonction qui ajoute 3 à son argument. En Haskell, voici une fonction non-curryfiée : uncurried_add (x, y) = x + y et la même après curryfication : curried_add x y = x + y ou bien : curried_add x = \y -> x + y où la barre oblique \ introduit une λ-expression (lambda-expression) et sert à définir des fonctions anonymes. Et voici une application partielle : main = do print (uncurried_add (3, 5)) -- 8 print ((curried_add 3) 5) -- 8 print (curried_add 3 5) -- 8 let add_three = curried_add 3 print (add_three 5) -- 8 print (add_three 12) -- 15 Remarques La curryfication peut se faire à la main ou bien par un programme. Pour les fonctions à deux arguments, voici ces programmes en Haskell : main = do let uncurried = uncurry curried_add print (uncurried (3, 5)) -- 8 let curried = curry uncurried_add print ((curried 3) 5) -- 8 print (curried 3 5) -- 8 let add_three = curried 3 print (add_three 5) -- 8 print (add_three 12) -- 15 Même fonction en Python : def uncurried_add(x, y): return x + y def curried_add(x): return lambda y: x + y print(uncurried_add(3, 5)) # 8 print(curried_add(3)(5)) # 8 add_three = curried_add(3) print(add_three(5)) # 8 print(add_three(12)) # 15 Même fonction en Caml : let uncurried_add(x, y) = x + y;; (* Type de la fonction : (entier * entier) -> entier ) let curried_add x y = x + y;; ( Type de la fonction : entier -> entier -> entier ) uncurried_add(3,4);; ( Retourne 7.
Jian Wang, Mingkui Wang, Olivier Schneider, Zhirui Xu, Yiming Li, Yi Zhang, Lei Zhang, Yi Wang, Aurelio Bay, Guido Haefeli, Jessica Prisciandaro, Tatsuya Nakada, Mark Tobin, Frédéric Blanc, Minh Tâm Tran, Greig Alan Cowan, Maurizio Martinelli, Vladislav Balagura, Donal Patrick Hill, Liang Sun, Luca Pescatore, François Fleuret, Mirco Dorigo, Jean Wicht, Liupan An, Chitsanu Khurewathanakul, Plamen Hristov Hopchev, Renato Quagliani, Hang Yin, Guido Andreassi, Olivier Göran Girard, Axel Kuonen, Preema Rennee Pais, Aravindhan Venkateswaran, Elena Graverini, Michel De Cian, Maria Elena Stramaglia, Vladimir Macko, Federico Leo Redi, Luis Miguel Garcia Martin, Tommaso Colombo, Vitalii Lisovskyi, Violaine Bellée, Guillaume Max Pietrzyk, Pavol Stefko, Pietro Marino, Maria Vieites Diaz, Lino Ferreira Lopes, Matthieu Philippe Luther Marinangeli, Maxime Schubiger, Christoph Frei, Sebastiana Gianì