Когда я выполнял свое задание, я столкнулся со следующим кодом. Я могу понять, почему выражение (thrice(add1))(0)
оценивается до 4. Если мы определим f(x) = x + 1
, то (thrice(add1))(0)
будет оцениваться как f(f(f(x)))
, который равен ((x+1)+1)+1
. Однако я не совсем понимаю, почему ((thrice(thrice))(add1))(0)
оценил бы 27
, а не 3*3=9
.Отслеживать функцию «трижды» - абстракция функции
//Javascript
function thrice(f) {
return compose(compose(f, f), f);
}
function compose(fun,fun2) {
return function (n) {
return fun(fun2(n));
};
}
function add1(k) {
return k + 1;
}
console.log(((thrice(thrice))(add1))(0)); //27
console.log((thrice(add1))(0)); //3