Sdílet prostřednictvím


Seq.delay<'T> – funkce (F#)

Vrátí číselné řady, který je součástí dané zpožděné specifikace sekvence.

Cesta k oboru názvů nebo modul: Microsoft.FSharp.Collections.Seq

Sestavení: FSharp.Core (v FSharp.Core.dll)

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

// Usage:
Seq.delay generator

Parametry

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

    Generování funkce posloupnosti.

Vrácená hodnota

Výsledné pořadí.

Poznámky

Při každém vyhodnocení funkce input IEnumerator pro posloupnost je požadováno.

Tato funkce se nazývá Delay v kompilovaný sestavení.Pokud přistupujete k funkci jazyka než F# nebo prostřednictvím reflexe, tento název použijte.

Příklad

Následující kód ukazuje způsob použití Seq.delay zpoždění hodnocení sekvence, vytvořené z kolekce, která je obvykle vyhodnocovány okamžitě.

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

Výsledek

  
  
  
  
  
  
  
  
  
  
  
  
  

Následující příklad kódu je ekvivalentní předchozí příklad, s výjimkou, že nepoužívá Seq.delay.Všimněte si rozdílu ve výstupu.

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

Výsledek

  
  
  
  
  
  
  
  
  
  
  
  
  

Platformy

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

Informace o verzi

F# základní verze knihovny

Podporovány: 2.0, 4.0, přenosné

Viz také

Referenční dokumentace

Collections.Seq – modul (F#)

Microsoft.FSharp.Collections – obor názvů (F#)