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 optionUna 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: 'StateValor 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