2017-12-19 26 views
3

錆では、イテレータを繰り返し使用できます。たとえば、次のようにイテレータを循環させるには?

fn main() { 
    for i in (1..4).cycle().take(5) { 
     print!("{} ", i); 
    } 
} 

出力リレー:

1 2 3 1 2 

F#で同じことを行うにはどのように?

[<EntryPoint>] 
let main argv = 
    seq { 1 .. 4 } |> (* Something *) |> Seq.take 5 |> Seq.iter (printf "%d ") 
    0 

答えて

6

私は任意の組み込み関数を知りませんが、あなたは簡単に独自に作成することができます

let cycle items = seq { 
    while true do 
     yield! items 
} 

または

let cycle' items = 
    Seq.initInfinite (fun _ -> items) |> Seq.concat 

または

let rec cycle'' items = seq { 
    yield! items 
    yield! cycle'' items 
} 

を次に

// 1 2 3 1 2 
seq { 1 .. 3 } |> cycle |> Seq.take 5 |> Seq.iter (printf "%d ") 
+1

これは奇妙なことに、組み込み関数がありません。多分、dotnetコアでの追加要求があります。この関数は、Haskell http://hackage.haskell.org/package/base-4.10.1.0/docs/Data-List.html#v:cycleにもあります。これはかなり一般的なようです。 – Boiethios

関連する問題