С макушки моей головы:
{0..n} |> Seq.fold (fun M k -> DivideAndSubtract matrix.[k,k] k M) matrix
Редактировать: еще несколько слов не повредят ответу:
Использование сгиба - это типичная схема «примените F к x и примените F к результату и примените F к этому результату ... пока мне не понадобится снова применять F». Императивная версия строки выше будет
let mutable M = matrix
for k in 0..n do
M <- DivideAndSubtract matrix.[k,k] k M
M
Внутри сгиба М обозначает промежуточный результат на каждом шаге. Может потребоваться некоторое время, чтобы понять, как сгибы работают, но как только вы это сделаете, они довольно мощные.