マイシーケンス |> 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