2009-07-25 7 views
1
 
mySequence 
|> Seq.iteri (fun i x -> ...) 
... 

シーケンスの最後にiをバインドするにはどうすればよいですか?言い換えれば、iteriによって反復された反復回数を表す値をどのようにバインドするのですか?Seq.iteriを使用して配列の最後にiを結合する方法

もちろん、refを作成してすべての繰り返しに対してiを割り当てることができますが、よりエレガントな方法があるのだろうかと思います。

答えて

4

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 
+0

私にとって襞は本当に私が問題解決にアプローチする方法を変更された機能的なイディオムの一つです。あなたが月光になることができるなら、あなたはそれらといくらかの時間を過ごすべきです。 – gradbot

+0

gradbotありがとう、私は励ましていただきありがとうございます! – Moonlight

0

私はあなただけで直接する関数を使用することができます理解したようSに渡されるシーケンスの戻り長eq.iteri(Seq.iteriはシーケンス全体を繰り返します)。これは代わりに、変更可能な変数を考えるのより機能的なプログラミングの方法になります:

あなたのケースでは
Seq.length mySequence 

mySequence |> Seq.iteri (fun i x -> ...) 
let i = Seq.length mySequence 
関連する問題