Это функция, а не число:
(n) -> ([0..n].reduce (a, b) -> a + b)
поэтому, когда вы говорите это:
newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))
вы вызываете sq
с функцией в качестве аргумента. Затем sq
попытается умножить эту функцию на себя, и в результате получится NaN
, поскольку отсутствует разумное числовое представление функции. И наконец, ваш третий console.log
пытается вызвать это значение NaN
как функцию, и появляется ваше сообщение об ошибке.
Что-то в форме fn1 fn2
для функций f1
и f2
не является композицией функций, фактически это то же самое, что и запись fn1(fn2)
, и это не приведет к созданию новой функции, если fn1
явно создан для возврата функции. Если вы хотите составить функции, то я думаю, что вам нужно сделать это вручную:
newSqSum = (n) -> sq ((n) -> ([0..n].reduce (a, b) -> a + b)) n
# Or with less hate for the people maintaining your code:
newSqSum = (n) -> sq sqSum n