我有一个矩阵: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
如何实现此流水线操作?
从我的头顶:
{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表示每一步的中间结果.掌握褶皱是如何工作可能需要一段时间,但一旦你这样做,它们就会非常强大.