Compartir a través de


Seq.delay<'T> (Función de F#)

Devuelve una secuencia que se compila a partir de la especificación retrasada dada de una secuencia.

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

Ensamblado: FSharp.Core (en FSharp.Core.dll)

// Signature:
Seq.delay : (unit -> seq<'T>) -> seq<'T>

// Usage:
Seq.delay generator

Parámetros

  • generator
    Tipo: unit -> seq<'T>

    Función generadora para la secuencia.

Valor devuelto

Secuencia resultante.

Comentarios

La función de entrada se evalúa cada vez que se solicita una interfaz IEnumerator para la secuencia.

Esta función se denomina Delay 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

En el código siguiente se muestra cómo usar Seq.delay para retrasar la evaluación de una secuencia creada a partir de una colección normalmente evaluada de forma inmediata.

// Normally sequences are evaluated lazily.  In this case,
// the sequence is created from a list, which is not evaluated
// lazily. Therefore, without Seq.delay, the elements would be
// evaluated at the time of the call to makeSequence.
let makeSequence function1 maxNumber = Seq.delay (fun () ->
    let rec loop n acc =
        printfn "Evaluating %d." n
        match n with
        | 0 -> acc
        | n -> (function1 n) :: loop (n - 1) acc
    loop maxNumber []
    |> Seq.ofList)
printfn "Calling makeSequence."
let seqSquares = makeSequence (fun x -> x * x) 4          
let seqCubes = makeSequence (fun x -> x * x * x) 4
printfn "Printing sequences."
printfn "Squares:"
seqSquares |> Seq.iter (fun x -> printf "%d " x)
printfn "\nCubes:"
seqCubes |> Seq.iter (fun x -> printf "%d " x)                       

Output

  
  
  
  
  
  
  
  
  
  
  
  
  

El ejemplo de código siguiente es equivalente al ejemplo anterior, salvo que no usa Seq.delay.Observe la diferencia en los resultados.

// Compare the output of this example with that of the previous.
// Notice that Seq.delay delays the
// execution of the loop until the sequence is used.
let makeSequence function1 maxNumber =
    let rec loop n acc =
        printfn "Evaluating %d." n
        match n with
        | 0 -> acc
        | n -> (function1 n) :: loop (n - 1) acc
    loop maxNumber []
    |> Seq.ofList
printfn "Calling makeSequence."
let seqSquares = makeSequence (fun x -> x * x) 4          
let seqCubes = makeSequence (fun x -> x * x * x) 4
printfn "Printing sequences."
printfn "Squares:"
seqSquares |> Seq.iter (fun x -> printf "%d " x)
printfn "\nCubes:"
seqCubes |> Seq.iter (fun x -> printf "%d " x)

Output

  
  
  
  
  
  
  
  
  
  
  
  
  

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#)