Bonjour,

Je comprend pas la notation composed(addThree)(4), ca me fait bizarre.
j'aurais plutot tendance a faire composed(addThree(4)) mais dans ce cas, ca ne marche pas

function addThree(x) {
    return x + 3;
}
//this function takes a function and returns
//a function that runs the function it was passed,
//and then runs that function _again_ on the return
//value of the first call to the function.
//make sense? look at it until it does.
function composed(func) {
    return function(x) {
        return func(func(x))
    }
}
composed(addThree)(4);
//what does that return?
var answer = composed(addThree)(4);
console.log(answer);

3 réponses


Comment c'est très bien expliqué en anglais (un peu modifié) :
"cette fonction prend une fonction en argument, et retourne une fonction qui est la composée de la fonction passée en argument avec elle-même"
ce qui est important c'est que ça prends une fonction en argument : addThree est une fonction, addThree(4) est un nombre égale a 7.
donc addThree(4) ne peut pas marcher.
composed(addThree) est donc une fonction (la composée de addThree avec elle même, donc addThree(addThree(.)) ou . est l'argument) donc on l'exécute sur la valeur 4 : composed(addThree)(4) => addThree(addThree(4)) = ???

sylvain
Auteur

C'est un truc de malade.

lol mais non.

si tu détails le code c'est simple :

// La ligne :
composed(addThree)(4)
// regardons le corps de la fonction composed :
function composed(func) {
    return function(x) {
        return func(func(x))
    }
}
// quand on appelle composed(addThree), func vaut en faite addThree donc composed(addThree) retourne
function(x) {
        return addThree(addThree(x))
}
//qui est donc une fonction qu'on va appeler fonctionTemporaire1
//on a donc 
fonctionTemporaire1 = composed(addThree)
//on a donc
composed(addThree)(4) = fonctionTemporaire1(4)
//et on a bien que fonctionTemporaire1(4) retourne addThree(addThree(4))