2

我有一个矩阵: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
如何实现此流水线?

4

1 回答 1

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 表示每一步的中间结果。掌握折叠的工作原理可能需要一段时间,但一旦你做到了,它们就会非常强大。

于 2011-02-26T12:06:43.467 回答