Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Funzione Seq.delay<'T> (F#)

Restituisce una sequenza compilata a partire dalla specifica ritardata indicata di una sequenza.

Percorso spazio dei nomi/modulo: Microsoft.FSharp.Collections.Seq

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

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

// Usage:
Seq.delay generator

generator

Tipo: unit -> seq<'T>

Funzione generatrice per la sequenza.

Sequenza risultante.

La funzione di input viene valutata ogni volta che viene richiesto un IEnumerator per la sequenza.

Questa funzione è denominata Delay negli assembly compilati. Utilizzare questo nome se si accede alla funzione da un linguaggio diverso da F# o tramite reflection.

Nel codice seguente viene illustrato come utilizzare Seq.delay per ritardare la valutazione di una sequenza creata da una raccolta che in genere viene valutata immediatamente.


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

            
              Chiamata a MakeSequence.
            
            
              Sequenze di stampa.
            
            
              Quadrati: Valutazione delle 4.
            
            
              Valutazione 3.
            
            
              Valutazione 2.
            
            
              Valutazione 1.
            
            
              Valutazione 0.
            
            
              16 9 4 cubi 1: Valutazione delle 4.
            
            
              Valutazione 3.
            
            
              Valutazione 2.
            
            
              Valutazione 1.
            
            
              Valutazione 0.
            
            
              64 27 8 1
            
          

L'esempio di codice seguente è equivalente all'esempio precedente, eccetto che non utilizza Seq.delay. Notare la differenza nell'output.


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

            
              Chiamata a MakeSequence.
            
            
              Valutazione 4.
            
            
              Valutazione 3.
            
            
              Valutazione 2.
            
            
              Valutazione 1.
            
            
              Valutazione 0.
            
            
              Valutazione 4.
            
            
              Valutazione 3.
            
            
              Valutazione 2.
            
            
              Valutazione 1.
            
            
              Valutazione 0.
            
            
              Sequenze di stampa.
            
            
              Quadrati: 16 9 4 cubi 1: 64 27 8 1
            
          

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

Versioni della libreria di base F#

Supportato in: 2,0, 4,0, portabile

Aggiunte alla community

AGGIUNGI
Mostra: