严格与非严格评估

时间:2013-11-28 07:03:55

标签: programming-languages

与非严格评估和懒惰评估相比,我很难找到渴望评估的优点/缺点。

我想知道你对此的看法,应该使用什么比较标准以及优点/缺点。

另一个问题是维基百科中的原因 https://en.wikipedia.org/wiki/Eager_evaluation

它说:“或者它可能会延迟对更迫切需要的表达式的评估。”

我没有得到那个部分......对于那些“更迫切需要”的表达式,如何急切评估延迟评估?不明白这是什么意思......任何想法?

1 个答案:

答案 0 :(得分:3)

完整的句子是:

  

急切评估的一个缺点是它迫使评估   在运行时可能不需要的表达式,或者它可能会延迟   评估有更迫切需要的表达。

采取以下(略构)示例:

List<Boolean> x = empty list;

// some times later, in some other part of the program
x.add(false);
// even later, in yet anopther part of the program
x.add(is_prime(sum(prime_factors(12345678999997773511111111111873452098612576436))));

// back in main processing
if (all(x)) {
    ....
} else {
   ....
}

all类似于:

 boolean all(List<Boolean> it) {
     for (b : list) if not b then return false;
     return true;
 }

这里,计算all(x)并不严格需要is_prime(...)的结果,因此它的计算会延迟更多的立即计算。更直接,因为需要使用值all(x)来决定如何继续,而在这种情况下 - 此时根本不需要值is_prime(...)。不过,它可以在else分支中稍后使用。