Compartir a través de


Seq.unfold<'State,'T> (Función de F#)

Devuelve una secuencia que contiene los elementos generados por el cálculo especificado.

Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Collections.Seq

Ensamblado: FSharp.Core (en 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

    Una función que toma el estado actual y devuelve una tupla de opciones del siguiente elemento de la secuencia y el siguiente valor de estado.

  • state
    Tipo: 'State

    Valor de estado inicial.

Valor devuelto

Secuencia de resultado.

Comentarios

El argumento state inicial especificado se pasa al generador de elementos. Para cada IEnumerator se generan elementos en el flujo bajo petición aplicando el generador de elementos, hasta que este devuelve un valor None. Cada llamada al generador de elementos devuelve un nuevo state residual.

El flujo se volverá a calcular cada vez que se solicite un IEnumerator y se iterará para la secuencia. La secuencia devuelta se puede pasar de un subproceso a otro de forma segura. Sin embargo, no se debe acceder simultáneamente a los valores de IEnumerator generados a partir de la secuencia devuelta.

Esta función se denomina Unfold en los ensamblados compilados. Si obtiene acceso a la función desde un lenguaje distinto de F# o mediante reflexión, use este nombre.

Ejemplo

El código siguiente muestra cómo usar Seq.unfold para generar dos secuencias. El primero solo genera una secuencia de enteros. El segundo genera una secuencia de números Fibonacci, que se forman sumando los dos números anteriores de la secuencia. Los primeros dos números de la secuencia Fibonacci son (1, 1), que forman el parámetro state inicial. El estado en cada paso consiste en los dos números cuya suma produce el siguiente número 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

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Información de versiones

Versiones de la biblioteca básica de F#

Admitido en: 2.0, 4.0, Portable

Vea también

Referencia

Collections.Seq (Módulo de F#)

Microsoft.FSharp.Collections (Espacio de nombres de F#)