Играя с F #, я пытаюсь думать о коде более функциональным образом. Большая часть моей работы носит численный характер, поэтому я думаю, имеет ли смысл перевоспитание. Является ли запись числового кода функциональным способом, как попытка установить квадратную привязку в круглом отверстии или это просто вопрос крутой кривой обучения независимо от приложения?Функциональный численный код
Например, давайте возьмем фрагмент, который демонстрирует слабый закон больших чисел:
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
Есть ли сжатое функциональный способ выражения выше? Какую часть функциональной парадигмы можно включить в эту работу?
Не уверен, что вопрос не в тему. Благодарю.
Кстати, есть книга _F # для ученых, хотя и немного устарела. И есть выдержки из [Real World Functional Programming] (https://code.msdn.microsoft.com/Chapter-4-Numerical-3df3edee). Возможно, более свежие книги имеют лучшее объяснение математики. – s952163