Compartilhar via


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

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

Namespace/Module Path: 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 recebe o estado atual e retorna um tuple de opção de próximo elemento da seqüência e o valor de estado seguir.

  • state
    Tipo: 'State

    O valor do estado inicial.

Valor de retorno

A seqüência de resultado.

Comentários

O argumento fornecido inicial de state é passado para o gerador do elemento.Para cada elementos de IEnumerator no fluxo são geradas sob demanda aplicando o gerador do elemento, até que um valor de None é retornado pelo gerador do elemento.Cada chamada ao gerador do elemento retorna novo stateresidual.

O fluxo recalculados cada vez que IEnumerator é solicitado e iterado para a seqüência.A seqüência retornado pode ser passada entre segmentos com segurança.Em o entanto, os valores individuais de IEnumerator gerados a seqüência retornado não devem ser acessados simultaneamente.

Essa função é chamada Unfold em assemblies compilados.Se você está acessando a função de um idioma diferente F#, ou com a reflexão, use este nome.

Exemplo

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

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 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informações de Versão

Versões da biblioteca principal de F#

Suportado em: 2,0, 4,0, portáteis

Consulte também

Referência

Módulo de Collections.SEQ (F#)

Microsoft.FSharp.Collections Namespace (F#)