1
我的序列
|> Seq.iteri (fun ix -> ...)
...

如何在序列末尾绑定 i ?换句话说,我如何绑定表示由 iteri 迭代的迭代次数的值?

当然我可以创建一个 ref 并为所有迭代分配 i ,但我想知道是否有更优雅的方式?

4

2 回答 2

4

你可以使用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
于 2009-07-25T08:03:20.793 回答
0

据我了解,您可以只使用将直接返回传递给 Seq.iteri 的序列长度的函数(因为 Seq.iteri 将遍历整个序列)。这将是更多的函数式编程方式,而不是考虑可变变量:

Seq.length mySequence

在你的情况下:

mySequence |> Seq.iteri (fun i x -> ...)
let i = Seq.length mySequence
于 2009-07-27T14:21:53.537 回答