Seq.Delay <'T>. Função (F#)
Retorna uma seqüência que é criada da especificação atrasada determinada de uma seqüência.
Caminho do namespace/módulo: 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
Valor de retorno
A seqüência resultante.
Comentários
A função de entrada é avaliada cada vez que um IEnumerator para a seqüência é solicitada.
Esta função é chamada de Delay em módulos (assemblies) compilados. Se você estiver acessando a função de um idioma diferente, por exemplo, F# ou através de reflexão, use esse nome.
Exemplo
O código a seguir mostra como usar Seq.delay para atrasar a avaliação de uma seqüência que é criada a partir de uma coleção que normalmente é avaliada 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 ele 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 7, SP2 do Windows Vista, Windows XP SP3, Windows XP Professional x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Informações sobre versão
O tempo de execução F#
Compatível com: 2.0, 4.0
Silverlight
Compatível com: 3
Consulte também
Referência
Módulo de Collections.SEQ (F#)
Microsoft.FSharp.Collections Namespace (F#)
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Agosto de 2010 |
Exemplo de código adicionado. |
Aprimoramento de informações. |