Curryfication

Curryfication

En programmation fonctionnelle, la curryfication désigne l'opération qui fait passer d'une fonction à plusieurs arguments à une fonction à un argument et qui retourne une fonction qui prend le reste des arguments. L'opération inverse est évidemment possible. La curryfication permet de créer des fonctions pures.

Le terme vient du nom du mathématicien américain Haskell Curry, bien que cette opération fut introduite pour la première fois par Moses Schönfinkel.

Sommaire

Définition

Imaginons une fonction add(x, y) qui prend deux arguments et en renvoie la somme. Une fois curryfiée, on aurait une fonction add(x) qui prend un argument et renvoie une fonction qui prend le deuxième argument. En pseudo-langage :

  curry (add (x,y)) → add 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.

Exemples

Haskell

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 (la barre \ signifie lambda et sert pour définir des fonctions anonymes) :

 curried_add = \x → \y → x + y

Et voici une application partielle :

 add_three = curried_add 3 

Python

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, 4)
add_three = curried_add(3)
print add_three(4)

Caml

Même fonction en Caml :

  let uncurried_add(x,y) = x + y;;
  let curried_add x y = x + y;;
  uncurried_add(3,4);;
  let add_three = curried_add 3;;
  add_three 4;;

Scheme

  (define uncurried-add (lambda (x y)
                                (+ x y)))
  (define curried_add (lambda (x) (lambda (y) (+ x y))))
  (define add-three (curried_add 3))

Perl 6

Un JAPH qui est un exemple de curryfication en Perl 6 :

 sub japh (Str $lang) { say "just another $lang hacker"; }
 my &perl6Japh := &japh.assuming("Perl6");
 perl6Japh();

Remarques

La fonction add_three est dite pure.

La curryfication peut se faire à la main ou bien par un programme. Pour les fonctions à deux arguments, voici ces programmes en Haskell :

 curry f x y = f(x,y)
 uncurry f (x, y) = f x y

Voir aussi


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Curryfication de Wikipédia en français (auteurs)

Игры ⚽ Нужно решить контрольную?

Regardez d'autres dictionnaires:

  • curryfication — ● n. m. ►MATH Transformation d une fonction à n paramètres en la composition d une fonction à n 1 paramètres et d une fonction à un seul paramètre. C est un des principes du lambda calcul …   Dictionnaire d'informatique francophone

  • Lambda-Calcul — « La notion de λ définissabilité fut la première de ce qui est accepté maintenant comme l équivalent exact des descriptions mathématiques pour lesquelles des algorithmes existent. »  Stephen Kleene, in Origins of Recursive Function …   Wikipédia en Français

  • Lambda-calcul — Le lambda calcul (ou λ calcul) est un système formel inventé par Alonzo Church dans les années 1930, qui fonde les concepts de fonction et d application. Il a été le premier formalisme utilisé pour définir et caractériser les fonctions récursives …   Wikipédia en Français

  • Lambda calcul — « La notion de λ définissabilité fut la première de ce qui est accepté maintenant comme l équivalent exact des descriptions mathématiques pour lesquelles des algorithmes existent. »  Stephen Kleene, in Origins of Recursive Function …   Wikipédia en Français

  • Perl6 — Perl 6 Apparu en Spécification : 2001 2009, mise en œuvre partielle par NQP Auteur Larry Wall …   Wikipédia en Français

  • Perl 6 — Apparu en Spécification : 2001 2011, mise en œuvre partielle par Rakudo Star Auteur …   Wikipédia en Français

  • Λ-calcul — Lambda calcul « La notion de λ définissabilité fut la première de ce qui est accepté maintenant comme l équivalent exact des descriptions mathématiques pour lesquelles des algorithmes existent. »  Stephen Kleene, in Origins of… …   Wikipédia en Français

  • Fermeture (informatique) — Pour les articles homonymes, voir Fermeture. Dans un langage de programmation, une fermeture ou clôture (en anglais, closure) est une fonction qui capture des références à des variables libres dans l environnement lexical[1]. Une fermeture est… …   Wikipédia en Français

  • Haskell Brooks Curry — Haskell Curry Pour les articles homonymes, voir Haskell et Curry (homonymie). Haskell Brooks Curry (né le 12 septembre 1900 et décédé le 1er septembre 1982) était un mathématicien et logicien américain. Ses travaux ont posé… …   Wikipédia en Français

  • Boo (Langage) — Pour les articles homonymes, voir Boo. Boo …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”