严格和懒惰评估之间有什么区别

时间:2015-06-25 13:13:58

标签: lazy-evaluation strict

我有一个名为严格和懒惰评估的主题,可以在功能和逻辑语言下学习。搜索时,我可以找到与Haskell相关的主题。我不知道那是什么。我所知道的编程语言是C,C ++,java。有人可以解释一下严格和懒惰评估的含义。

2 个答案:

答案 0 :(得分:1)

懒惰评估等待计算任何内容,直到需要它为止。如果存储值并且仅在某些情况下使用,则可以节省时间。我认为严格只是意味着他们马上计算出来。

答案 1 :(得分:1)

使用延迟评估时,您只想在需要时计算值。一个简单的例子就是我们有一个if语句。

if(B1 OR B2)....//do something

假设B1为真,我们从左到右进行评估。我们知道B1是正确的,因此不需要评估B2,因为OR运算符的定义。现在假设B1是假的,现在我们必须知道if语句的真值取决于B2,所以我们必须评估B2。相同的类比可以用于其他逻辑运算符。严格(或贪婪)评估计算B1和B2的值。我们可以进一步利用惰性评估。假设我们有以下代码:

some_value = map (+1) some_list //increases all values in the list by 1

我们也可以对上述声明使用延迟评估。我们可以在代码中的某处定义它。如果我们从不在代码中使用some_value,则无需计算它。如果我们在程序中进一步调用它,它会被计算出来并存储在内存中,所以每次我们需要some_value的值时我们都不必计算它。无论我们是否使用它的价值,严格的评估都会强制进行计算。懒惰评价和严格评价都有各自的优缺点。