Наткнулся на codewars.com на
следующую задачу:
Нужно спроектировать функцию высшего порядка так, чтобы она извлекала другие функции из массива и выполняла их по цепочке. Причем, вводное значение задается... как-же это называется-то... скажем, на втором уровне или порядке. То есть:
chained([f1,f2,f3])(0)
.
Вот оригинал:
Your task is to write a higher order function for chaining together a list of unary functions. In other words, it should return a function that does a left fold on the given functions.
chained([a,b,c,d])(input)
Should yield the same result as
d(c(b(a(input))))
Сперва я впал в полный ступор, вообще не было понятно что бы это могло значить, но потом вспомнил главу о функциях высшего порядка в учебнике "Выразительный JavaScript" и приступил к реализации по памяти. На практике ранее такую запутанную функцию не реализовывал:
function chained(functions) {
return function(input){
console.log(input);
var param = input;
for (i = functions.length - 1; i >= 0; i--){
let making = functions[i];
param = making(param);
}
}
}
На что получил такой ответ:
Expected: 4, instead got: undefined
Ээээ... в смысле? Понятно, что полученный тип данных не соответствовал требуемому или индекс был задан неправильно. Но почему?
Раньше не реализовывал функции настолько высшего порядка. То, что я делал было гораздо проще, и самое сложное что я писал - это генератор чисел Фибоначчи и рекурсивные аналоги forEach'а, map'а и filter'а.