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 optionFunció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: 'StateValor 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