2017-12-19 8 views
3

녹에서 반복자를 순환시킬 수 있습니다.반복기를 순환시키는 방법은 무엇입니까?

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

OUPUT : 예를 들어

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

관련 문제