Compartilhar via


SEQ.Delay <'T>. Função (F#)

Retorna uma seqüência que é compilada da especificação tardia de uma determinada seqüência.

Namespace/Module Path: Microsoft.FSharp.Collections.Seq

Assembly: FSharp.Core (em FSharp.Core.dll)

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

// Usage:
Seq.delay generator

Parâmetros

  • generator
    Tipo: unidade->segs.<'T>

    a função de geração para a seqüência.

Valor de retorno

a seqüência resultante.

Comentários

A função de entrada é avaliada cada vez que IEnumerator para a seqüência é solicitado.

Essa função é chamada Delay em assemblies compilados.Se você está acessando a função de um idioma diferente F#, ou com a reflexão, use este nome.

Exemplo

O código a seguir mostra como usar Seq.delay para atrasar a avaliação de uma seqüência que é criada de uma coleção que é avaliada normalmente imediatamente.

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

Saída

  
  
  
  
  
  
  
  
  
  
  
  
  

O exemplo de código a seguir é equivalente ao exemplo anterior, exceto que não usa Seq.delay.Observe a diferença na saída.

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

Saída

  
  
  
  
  
  
  
  
  
  
  
  
  

Plataformas

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

Informações de Versão

Versões da biblioteca principal de F#

Suportado em: 2,0, 4,0, portáteis

Consulte também

Referência

Módulo de Collections.SEQ (F#)

Microsoft.FSharp.Collections Namespace (F#)