Sök…
Lazy Evaluation Introduktion
De flesta programmeringsspråk, inklusive F #, utvärderar beräkningar omedelbart i enlighet med en modell som heter Strict Evaluation. I Lazy Evaluation utvärderas dock beräkningarna inte förrän de behövs. F # tillåter oss att använda lat utvärdering genom både lazy
nyckelord och sequences
.
// define a lazy computation
let comp = lazy(10 + 20)
// we need to force the result
let ans = comp.Force()
Dessutom, vid användning av Lazy Evaluation, cachelagras resultaten av beräkningen så om vi tvingar resultatet efter vår första instans att tvinga det, kommer inte uttrycket i sig att utvärderas igen
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()
Introduktion till Lazy Evaluation i F #
F #, som de flesta programmeringsspråk, använder strikt utvärdering som standard. I strikt utvärdering utförs beräkningar omedelbart. Däremot, Lazy Evaluation, undviker genomförandet av beräkningar tills deras resultat behövs. Dessutom cachas resultaten från en beräkning under Lazy Evaluation, vilket undviker behovet av en ny utvärdering av ett uttryck.
Vi kan använda Lazy utvärdering i F # genom både det lazy
nyckelordet och 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()