Suche…


Lazy Evaluation Einführung

Die meisten Programmiersprachen, einschließlich F #, werten die Berechnungen sofort nach einem Modell aus, das als strikte Bewertung bezeichnet wird. In Lazy Evaluation werden Berechnungen jedoch erst ausgewertet, wenn sie benötigt werden. Mit F # können wir die faule Auswertung sowohl über das lazy Schlüsselwort als auch über sequences .

// define a lazy computation
let comp = lazy(10 + 20)

// we need to force the result
let ans = comp.Force()

Wenn Sie Lazy Evaluation verwenden, werden die Ergebnisse der Berechnung zwischengespeichert. Wenn Sie also das Ergebnis nach unserer ersten Erzwingung erzwingen, wird der Ausdruck selbst nicht erneut ausgewertet

let rec factorial n = 
  if n = 0 then 
    1
  else 
    (factorial (n - 1)) * n


let computation = lazy(printfn "Hello World\n"; factorial 10)

// Hello World will be printed
let ans = computation.Force()

// Hello World will not be printed here
let ansAgain = computation.Force()

Einführung in Lazy Evaluation in F #

Wie die meisten Programmiersprachen verwendet F # standardmäßig die strikte Auswertung. Bei der strengen Auswertung werden die Berechnungen sofort ausgeführt. Im Gegensatz dazu verzögert Lazy Evaluation die Ausführung von Berechnungen, bis ihre Ergebnisse benötigt werden. Darüber hinaus werden die Ergebnisse einer Berechnung unter Lazy Evaluation zwischengespeichert, wodurch die Neubewertung eines Ausdrucks entfällt.

Wir können die Lazy-Auswertung in F # sowohl über das lazy Schlüsselwort als auch über Sequences

// 23 * 23 is not evaluated here
// lazy keyword creates lazy computation whose evaluation is deferred 
let x = lazy(23 * 23)

// we need to force the result
let y = x.Force()

// Hello World not printed here
let z = lazy(printfn "Hello World\n"; 23424)

// Hello World printed and 23424 returned
let ans1 = z.Force()

// Hello World not printed here as z as already been evaluated, but 23424 is
// returned
let ans2 = z.Force()


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow