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

    Función que toma el estado actual y devuelve una tupla de opción del siguiente elemento de la secuencia y el siguiente valor de estado.

  • state
    Tipo: 'State

    Valor de estado inicial.

Valor devuelto

Secuencia resultante.

Comentarios

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

Se vuelve a calcular la secuencia cada vez que se solicita y se itera una interfaz IEnumerator para la secuencia.La secuencia devuelta se puede pasar entre subprocesos de forma segura.Sin embargo, no se debe tener acceso de forma simultánea a los valores de IEnumerator individuales 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 el uso de Seq.unfold para generar dos secuencias.El primero simplemente genera una secuencia de enteros.El segundo genera una secuencia de números de Fibonacci, que se forman agregando los dos números anteriores de la secuencia.Los dos primeros números de la secuencia de Fibonacci son (1, 1), lo que forma el parámetro state inicial.El estado en cada paso consta de los dos números cuya suma genera el número de Fibonacci siguiente.

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#

Se admite en: 2.0, 4.0, portables

Vea también

Referencia

Collections.Seq (Módulo de F#)

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