У меня есть такой код:
let createArray = (A) =>
A.map((val) =>
val * heavyFn(A.length)
)
, где heavyFn(X)
- это функция, потребляющая ресурсы, которая всегда возвращает одно и то же значение для константы X. Я считаю, что хорошие функциональные языки, такие как Haskell, оптимизируют это, поэтому heavyFn(X)
вызывается только один раз для каждого результата, но javascript, очевидно, нет.
Я мог бы оптимизировать его следующим образом:
let createArray = (A) => {
const H = heavyFn(A.length);
return A.map((val) =>
val * H
)
}
Но возможно ли это закодировать в чистом функционале javascript? Я имею в виду без переменных, только параметры, без явного возврата, без фигурных скобок, просто вложенные выражения функций стрелок. Просто из любопытства, если javascript обладает функциональными способностями.
Единственный способ, которым я понял, был
let createArray = A => [heavyFn(A.length), ...A].map((val,i,H) =>
val * H[0]
).slice(1)
, но это похоже на взлом.