自行车流水线

时间:2011-02-26 11:49:17

标签: f# pipeline

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

let DivideAndSubstract value index (matrix: float[,]) = 
    //something that returns a matrix

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

matrix  
|> DivideAndSubstract matrix.[0,0] 0  
|> DivideAndSubstract matrix.[1,1] 1  
|> DivideAndSubstract matrix.[2,2] 2  
....  
|> DivideAndSubstract matrix.[n,n] n 

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

1 个答案:

答案 0 :(得分:5)

从头到尾:

{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

在折叠中,M表示每一步的中间结果。掌握折叠的工作方式可能需要一段时间,但一旦你这样做,他们就会非常强大。