我的序列 |> Seq.iteri (fun ix -> ...) ...
如何在序列末尾绑定 i ?换句话说,我如何绑定表示由 iteri 迭代的迭代次数的值?
当然我可以创建一个 ref 并为所有迭代分配 i ,但我想知道是否有更优雅的方式?
你可以使用fold,这样
Seq.iteri (fun i x -> ...)
变成
Seq.fold (fun i x -> ... ; i+1) 0
沿着这些思路:
let aSeq =
seq {
for i in 1..10 do
printfn "eval %d" i
yield i
}
let r =
aSeq
|> Seq.fold (fun i x ->
printfn "iter %d" x // or whatever is "..."
i+1) 0
printfn "result: %d" r
据我了解,您可以只使用将直接返回传递给 Seq.iteri 的序列长度的函数(因为 Seq.iteri 将遍历整个序列)。这将是更多的函数式编程方式,而不是考虑可变变量:
Seq.length mySequence
在你的情况下:
mySequence |> Seq.iteri (fun i x -> ...)
let i = Seq.length mySequence