Programming languages 严格与非严格评估

Programming languages 严格与非严格评估,programming-languages,Programming Languages,与非严格评估和懒惰评估相比,我很难找到急切评估的优点/缺点 我想知道你对此的想法,应该使用什么样的比较标准以及优缺点 另外一个问题是为什么在维基百科上 它说:“或者它可能会延迟对更迫切需要的表达式的求值。” 我不明白那部分。。。急切求值如何延迟对“更迫切需要”表达式的求值?我不明白那是什么意思。。。有什么想法吗?完整的句子是: 急切评估的一个缺点是,它强制评估 在运行时可能不需要的表达式,或者可能会延迟 对更迫切需要的表达式进行求值 以以下(稍加修饰)为例: 这里,计算all(x)并不严格需要

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

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

另外一个问题是为什么在维基百科上

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

我不明白那部分。。。急切求值如何延迟对“更迫切需要”表达式的求值?我不明白那是什么意思。。。有什么想法吗?

完整的句子是:

急切评估的一个缺点是,它强制评估 在运行时可能不需要的表达式,或者可能会延迟 对更迫切需要的表达式进行求值

以以下(稍加修饰)为例:


这里,计算
all(x)
并不严格需要is_prime(…)的结果,因此它的计算延迟了更直接的计算。更直接,因为需要值
all(x)
来决定如何继续,而在本例中,此时根本不需要值
是素数(…)
。不过,它稍后可能会在
else
分支中使用。

Ingo,谢谢您的示例。怎么不需要计算出素数呢?它不需要is_prime(…)表达式的结果来检查列表中的每个元素是否都是prime吗?@JimGoodall不,x列表只是一些布尔值的列表(将其视为要检查的一些命题的列表)。其中一个命题是,这个大数字的素数因子之和本身就是素数(我告诉过你,这是我编造出来的——把它想象成一个长时间运行的计算)。但是由于第一个命题是错误的,如果不是为了严格的评估,就不需要计算所有其他命题来决定采用if的哪个分支。非常感谢您的澄清!我认为这是有意义的现在。。。!我不知道你是否读过我问题的主要部分?但我也有兴趣清楚地了解使用什么标准来评估严格/非严格的优点/缺点。我想一个标准可能是资源使用:内存和处理器。但是语言设计原则呢?严格与非严格是否影响可读性、可写性和正交性?我很难在书中找到一个清晰的解释(我身边有5本编程语言书,唯一解释一点的是瓦特)好吧,@JimGoodall,我确实读了你问题的主要部分。但是,作为一个非严格评价语言的作者,我不想给你(和社区)一个有偏见的答案。但在评论中,我可能会说,我认为非严格的主要优势在于可读性、可写性和正交性。谢谢,我读了你的简历,看到你是一种语言的作者(这就是为什么我非常重视你的答案,谢谢)。希望能在某个地方找到一些关于这个问题的完全公正的分析。因为在维基百科中,我只发现许多优点/缺点的列表对我来说并不完全清楚。我希望能和一些例子做一个很好的比较,而不是像某些人在维基百科上写的那个小列表。谢谢大家
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 {
   ....
}
 boolean all(List<Boolean> it) {
     for (b : list) if not b then return false;
     return true;
 }