We want to specialize a JavaScript function of fixed arity by transforming it first into a composition of functions of lower arities.
First, consider a function of the following form:
const fn = (p1, p2, ..., pN) => f(p1, p2, ..., pN);
In its simplest form, this problem consists of transforming this function into a new function of the following form:
const curried = p1 => (p2, ..., pN) => fn(p1, p2, ..., pN);
We can also generalize this process to get the following form:
const curried = p1 => p2 => ... => pN => fn(p1, p2, ..., pN);
…
Memoization is a technique for storing values returned by a function to avoid having to redo computations that have already been performed previously.
This technique is especially very useful when we have a function which is called regularly and when its computation is expensive.
We assume here that we are working with pure functions. In particular, they must always return the same value for the same list of arguments: we can therefore store computed values for later use, thus allowing us to bypass a redundant computation.
A naive implementation of a function that returns the nth number in the Fibonacci…
La mémoïsation est une technique permettant de mémoriser les valeurs retournées par une fonction pour éviter d’avoir à refaire des calculs qui auraient déjà été réalisés précédemment.
Cette technique est en particulier très utile lorsque nous avons une fonction qui est appelée régulièrement et en particulier lorsque le calcul est coûteux.
Nous supposons ici que nous travaillons avec des fonctions pures. …
Nous souhaitons spécialiser une fonction JavaScript à plusieurs paramètres en la transformant d’abord en une composition de fonctions d’arités inférieures.
Dans un premier temps, considérons une fonction de la forme suivante :
const fn = (p1, p2, ..., pN) => f(p1, p2, ..., pN);
Dans sa forme la plus simple, ce problème consiste à transformer cette fonction en une nouvelle fonction de la forme suivante :
const curried = p1 => (p2, ..., pN) => fn(p1, p2, ..., pN);
Nous pouvons également généraliser ce processus pour obtenir la forme suivante :
const curried = p1 => p2 => ... =>…
Nous souhaitons extraire une méthode prototypique pour pouvoir la réutiliser de façon fonctionnelle, éventuellement sur d’autres types d’objets.
const myFunction = fromMethod(MyClass.prototype.myMethod);
myFunction(obj, ...args);
Il s’agit là d’implémenter une fonction fromMethod
de telle sorte que nous puissions appeler la fonction myFunction
comme nous le faisons dans la deuxième ligne, c’est-à-dire :
obj
sur lequel nous souhaitons appliquer la fonction.Ainsi, tout se passe comme si nous avions fait obj.myMethod(...args)
…