Buscar..


Introducción perezosa de la evaluación

La mayoría de los lenguajes de programación, incluido F #, evalúan los cálculos inmediatamente de acuerdo con un modelo llamado Evaluación estricta. Sin embargo, en la Evaluación perezosa, los cálculos no se evalúan hasta que son necesarios. F # nos permite usar la evaluación perezosa a través de la palabra clave y las sequences lazy .

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

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

Además, cuando se usa la Evaluación perezosa, los resultados del cálculo se almacenan en caché, por lo que si forzamos el resultado después de nuestra primera instancia de forzarlo, la expresión en sí no se volverá a evaluar.

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

Introducción a la evaluación perezosa en F #

F #, como la mayoría de los lenguajes de programación, utiliza la evaluación estricta de forma predeterminada. En la Evaluación Estricta, los cálculos se ejecutan inmediatamente. Por el contrario, Lazy Evaluation, retrasa la ejecución de los cálculos hasta que se necesitan sus resultados. Además, los resultados de un cálculo en Lazy Evaluation se almacenan en caché, lo que evita la necesidad de una reevaluación de una expresión.

Podemos usar la evaluación perezosa en F # a través de la palabra clave lazy y las 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow