我有一个矩阵: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
我该如何实现此流水线操作?
答案 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表示每一步的中间结果。掌握折叠的工作方式可能需要一段时间,但一旦你这样做,他们就会非常强大。