Как можно оптимизировать этот код дальше:
let rec nCollect func = function
| [] -> []
| x::xs -> let firstAndNext body (firstBody, ys) =
let newFirst, z = func firstBody body
newFirst, z::ys
let y, ys = List.foldBack firstAndNext xs (x, [])
y::(nCollect func ys)
Этот код является частью программы моделирования nbody. Он получает каждое тело и применяет функцию func между ним и каждым следующим. Результаты используются для следующих итераций. Я немного оптимизировал это со списками. Проблема в том, что количество входных тел меньше 10, но nCollect вызывается миллионы раз. Например, если я использую хвостовую рекурсию в nCollect, результат будет хуже.