Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to cycle on an iterator?

Tags:

iterator

f#

In Rust, you can cycle on an iterator. For example:

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

Ouput:

1 2 3 1 2 

How to do the same in F#?

[<EntryPoint>]
let main argv =
    seq { 1 .. 4 } |> (* Something *) |> Seq.take 5 |> Seq.iter (printf "%d ")
    0
like image 422
Boiethios Avatar asked Dec 09 '25 17:12

Boiethios


1 Answers

I don't know of any built-in function, but you can easily create your own:

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

or

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

or

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

Then

// 1 2 3 1 2
seq { 1 .. 3 } |> cycle |> Seq.take 5 |> Seq.iter (printf "%d ")
like image 134
CaringDev Avatar answered Dec 11 '25 12:12

CaringDev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!