Curryfication et évaluation partielle (javascript/haskell)
Voir aussi : vidéo peertube - vidéo youtube - dépôt git
Comment écrire des fonctions curryfiée et faire de l’évaluation partielle en Javascript et en Haskell.
rappels
fonction d’ordre supérieur : fonction qui prend ou retourne une fonction
fonction à plusieurs paramètres :
- non-curryfiée : prend plusieurs paramètres et retourne une valeur
- curryfiée : prend un seul paramètre et retourne une fonction gérant les paramètres restant
évaluation partielle : évaluation d’une fonction curryfiée pour une partie de ses paramètres
exemple en Javascript
- fonction classique (non-curryfiée) à plusieurs paramètres :
= function(x, y) {
add return x + y
}= add(42, 2) n
- fonction wrapper simulant l’évaluation partielle :
= function(y) {
add42 return add(42, y)
}= add42(2) n
- fonction curryfiée simulant plusieurs paramètres :
= function(x) {
add_curry return function(y) {
return x + y
}
}= add_curry(42, 2) n
- fonction obtenue par évaluation partielle :
= add_curry(42)
add42_curry = add42_curry(2) n
exemple en Javascript ES6
- fonction classique (non-curryfiée) à plusieurs paramètres :
= (x, y) => x + y
add = add(42, 2) n
- fonction wrapper simulant l’évaluation partielle :
= (y) => add(42, y)
add42 = add42(2) n
- fonction curryfiée simulant plusieurs paramètres :
= x => y => x + y
add_curry = add_curry(42, 2) n
- fonction obtenue par évaluation partielle :
= add_curry(42)
add42_curry = add42_curry(2) n
exemple en Haskell
- fonction non-curryfiée utilisant un tuple :
= x + y
add (x,y) = add (42,2) n
- fonction wrapper simulant l’évaluation partielle :
= add (42,y)
add42 y = add42(2) n
- fonction curryfiée simulant plusieurs paramètres :
= x + y
add_curry x y = add_curry(42, 2) n
- fonction obtenue par évaluation partielle :
= add_curry 42
add42_curry = add42_curry(2) n