Funcionalizando código numérico

Brincando com F #, estou tentando pensar em código de uma maneira mais funcional. Uma grande parte do meu trabalho é de natureza numérica, então estou pensando se essa reeducação faz sentido. Escrever código numérico de maneira funcional é como tentar encaixar uma estaca quadrada em um furo redondo ou é simplesmente uma questão de uma curva de aprendizado íngreme, independentemente da aplicação?

Por exemplo, vamos pegar um trecho que demonstra a lei fraca de grandes números:

open System
open System.IO
open System.Windows.Forms
open System.Windows.Forms.DataVisualization
open FSharp.Data
open FSharp.Charting
open FSharp.Core.Operators
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.Random
open MathNet.Numerics.Distributions
open MathNet.Numerics.Statistics


let T = 1000

let arr1 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
    arr1.[i] <- [|for j in 1..i do yield Exponential.Sample(0.1)|] |> Statistics.Mean

let arr2 = Array.init T (fun i -> float i*0.)
for i in 0 .. T-1 do
    arr2.[i] <- arr1.[1 .. i] |> Statistics.Mean

arr2 |> Chart.Line |> Chart.Show

Existe uma maneira funcional sucinta de expressar o que foi dito acima? Quanto de um paradigma funcional pode ser incorporado a um trabalho como este?

Não tenho certeza se a pergunta está fora do tópico. Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion