自行车流水线

Me *_*ain 2 f# pipeline

我有一个矩阵:Array2D和一个函数

let DivideAndSubstract value index (matrix: float[,]) = 
    //something that returns a matrix
Run Code Online (Sandbox Code Playgroud)

所以我需要将这个函数n次应用到我的矩阵中:

matrix  
|> DivideAndSubstract matrix.[0,0] 0  
|> DivideAndSubstract matrix.[1,1] 1  
|> DivideAndSubstract matrix.[2,2] 2  
....  
|> DivideAndSubstract matrix.[n,n] n 
Run Code Online (Sandbox Code Playgroud)

其中n = Array2D.length1矩阵 - 1
如何实现此流水线操作?

cfe*_*ern 5

从我的头顶:

{0..n} |> Seq.fold (fun M k -> DivideAndSubtract matrix.[k,k] k M) matrix
Run Code Online (Sandbox Code Playgroud)

编辑:更多的话不会伤害答案:

使用折叠是'将F应用于x并将F应用于结果并将F应用于该结果......直到我不需要再次应用F'的典型模式.上面这一行的命令版本将是

let mutable M = matrix
for k in 0..n do
    M <- DivideAndSubtract matrix.[k,k] k M
M
Run Code Online (Sandbox Code Playgroud)

在折叠内,M表示每一步的中间结果.掌握褶皱是如何工作可能需要一段时间,但一旦你这样做,它们就会非常强大.