Я не удивлен, что в режиме отладки ничего не изменилось. Почему бы вам на самом деле не рассчитать N повторений этого (#time;;
в интерактивной подсказке F #).
Что касается вашей надежды поделиться общими вычислениями для фиксированных значений всех, кроме dx, попробуйте это:
let fdx = foo2 X y1 y2
for dx in dxes do
fdx dx
То есть fdx - это частичное приложение. Явное хранение вне цикла дает мне надежду на оптимизатор.
По крайней мере, в интерактивном приглашении (я не думаю, что полная оптимизация там сделана, не так ли?), Похоже, мое предложение ускоряется только на 15% (странно, что есть какое-то ускорение, потому что оно точно повторяет Тело foo2). Делать это намного быстрее:
let fdx = foo3 X y1 y2
for dx in dxes do
fdx dx
Где находится foo3 (из Бенджлола):
let foo3 (X:float) y1 y2 =
let dy = (y2 - y1) / X
(fun dx -> y1 + dy * dx)
Обратите внимание, что просто использование foo3 в качестве функции с четырьмя аргументами в цикле в два раза медленнее, чем в foo2, но хранение частичного приложения вне цикла - в 3 раза быстрее.