Código numérico funcionalizado

Jugando con F #, estoy tratando de pensar en el código de una manera más funcional. Una gran parte de mi trabajo es de naturaleza numérica, así que estoy pensando si esta reeducación tiene sentido. ¿Escribir código numérico de una manera funcional como tratar de encajar una clavija cuadrada en un agujero redondo o es simplemente una cuestión de una curva de aprendizaje empinada independientemente de la aplicación?

Por ejemplo, tomemos un fragmento que demuestre la ley débil 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 una forma funcional sucinta de expresar lo anterior? ¿Qué tanto de un paradigma funcional se puede incorporar en un trabajo como este?

No estoy seguro si la pregunta está fuera de tema. Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta