懒惰评估简介
大多数编程语言(包括 F#)都会根据称为严格评估的模型立即评估计算。但是,在 Lazy Evaluation 中,计算直到需要时才会进行评估。F#允许我们通过 lazy
关键字和 sequences
使用延迟评估。
// define a lazy computation
let comp = lazy(10 + 20)
// we need to force the result
let ans = comp.Force()
此外,在使用 Lazy Evaluation 时,计算结果会被缓存,因此如果我们在第一个强制实例后强制执行结果,则表达式本身将不再被计算
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()