Envoyé par
bluestorm
Par exemple en OCaml quand tu écris :
let f x y z = foo
C'est syntaxiquement équivalent à :
let f = fun x y z -> foo
Lui-même équivalent à
let f = fun x -> fun y -> fun z -> foo
qui est une forme explicitement curryfiée; il n'y a rien d'automatique, juste un sucre syntaxique.
Je peux imaginer des langages où la curryfication est "implicite", dans le sens où si on donne seulement une partie des paramètres à une fonction n-aire, le typeur insère lui-même une abstraction qui attend les arguments suivants. Ça doit être possible en Scala¹, avec des cœrcions explicites, en Coq, ou avec une extension Haskell bizarre (surcharger l'application), mais à ma connaissance les gens ne le font pas.
¹ : il me semble que le style idiomatique en Scala est plutôt d'écrire des fonctions non curryfiées f(x,y), et d'utiliser leur sucre syntaxique d'abstraction quand nécessaire : f(foo,_) pour abstraire selon le second argument.