Seq.unfold<'State,'T> 함수(F#)
지정한 계산에서 생성된 요소를 포함하는 시퀀스를 반환합니다.
네임스페이스/모듈 경로: Microsoft.FSharp.Collections.Seq
어셈블리: FSharp.Core(FSharp.Core.dll)
// Signature: Seq.unfold : ('State -> ('T * 'State) option) -> 'State -> seq<'T> // Usage: Seq.unfold generator state
매개 변수
generator
형식: 'State -> 'T * 'State option현재 상태를 사용하여 시퀀스의 다음 요소 옵션 튜플과 다음 상태 값을 반환하는 함수입니다.
state
형식: 'State초기 상태 값입니다.
반환 값
결과 시퀀스입니다.
설명
지정한 초기 state 인수는 요소 생성기로 전달됩니다. 요소 생성기가 None 값을 반환할 때까지 요소 생성기를 적용하여 스트림의 각 IEnumerator 요소를 요청 시 생성합니다. 요소 생성기를 호출할 때마다 새로운 나머지 state가 반환됩니다.
시퀀스에 대해 IEnumerator를 요청 및 반복할 때마다 스트림이 다시 계산됩니다. 반환된 시퀀스는 스레드 간에 안전하게 전달할 수 있습니다. 그러나 반환된 시퀀스에서 생성되는 개별 IEnumerator 값에 동시에 액세스해서는 안 됩니다.
컴파일된 어셈블리에서 이 함수의 이름은 Unfold입니다. F# 이외의 언어에서 또는 리플렉션을 통해 함수에 액세스할 때는 이 이름을 사용합니다.
예제
다음 코드는 Seq.unfold를 사용하여 두 시퀀스를 생성하는 방법을 보여줍니다. 첫 번째 함수는 정수 시퀀스만 생성합니다. 두 번째 함수는 시퀀스의 이전 숫자 두 개를 더하여 생성되는 피보나치 수열을 생성합니다. 피보나치 수열의 처음 두 숫자인 (1, 1)이 초기 state 매개 변수를 형성합니다. 각 단계의 상태는 해당 합계가 다음 피보나치 숫자를 생성하는 두 숫자로 구성됩니다.
let seq1 = Seq.unfold (fun state -> if (state > 20) then None else Some(state, state + 1)) 0
printfn "The sequence seq1 contains numbers from 0 to 20."
for x in seq1 do printf "%d " x
let fib = Seq.unfold (fun state ->
if (snd state > 1000) then None
else Some(fst state + snd state, (snd state, fst state + snd state))) (1,1)
printfn "\nThe sequence fib contains Fibonacci numbers."
for x in fib do printf "%d " x
플랫폼
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
버전 정보
F# 핵심 라이브러리 버전
2.0, 4.0, Portable에서 지원됨