Compartilhar via


Seq.unfold <' estado, T' > Função (F#)

Retorna uma seqüência que contém os elementos gerados por determinada computação.

Caminho do namespace/módulo: Microsoft.FSharp.Collections.seq

Assembly: FSharp.Core (em FSharp.Core.dll)

// Signature:
Seq.unfold : ('State -> 'T * 'State option) -> 'State -> seq<'T>

// Usage:
Seq.unfold generator state

Parâmetros

  • generator
    Tipo: 'State -> 'T * 'State option

    Uma função que leva o estado atual e retorna uma tupla de opção do próximo elemento de seqüência e o próximo valor de estado.

  • state
    Tipo: 'State

    O valor do estado inicial.

Valor de retorno

A seqüência de resultado.

Comentários

O dado inicial state argumento é passado para o gerador de elemento. Para cada IEnumerator elementos no fluxo são gerada sob demanda, aplicando o gerador de elemento, até que uma None valor é retornado pelo gerador de elemento. Cada chamada para o gerador de elemento retorna um novo resíduo state.

O fluxo será recalculado a cada vez que um IEnumerator é solicitada e repetido na seqüência. A seqüência retornada pode ser passada entre threads com segurança. No entanto, individuais IEnumerator valores gerados a partir da seqüência retornada não devem ser acessados simultaneamente.

Esta função é chamada de Unfold em módulos (assemblies) compilados. Se você estiver acessando a função de um idioma diferente, por exemplo, F# ou através de reflexão, use esse nome.

Exemplo

O código a seguir demonstra o uso Seq.unfold para gerar duas seqüências. O primeiro simplesmente gera uma seqüência de números inteiros. A segunda gera uma seqüência de números de Fibonacci, que são compostos Adicionando os dois números anteriores na seqüência. Os dois primeiros números na seqüência de Fibonacci são (1, 1), que forma inicial state parâmetro. O estado em cada etapa consiste em dois números cuja soma produz o próximo número de Fibonacci.

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
        

Plataformas

O Windows 7, SP2 do Windows Vista, Windows XP SP3, Windows XP Professional x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Informações sobre versão

O tempo de execução F#

Compatível com: 2.0, 4.0

Silverlight

Compatível com: 3

Consulte também

Referência

Módulo de Collections.SEQ (F#)

Microsoft.FSharp.Collections Namespace (F#)