严格和懒惰评估有什么区别[关闭]

问题描述 投票:1回答:2

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

lazy-evaluation strict
2个回答
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的值时计算它。无论我们是否使用它的值,严格的评估都会强制进行计算。懒惰评价和严格评价都有各自的优缺点。

© www.soinside.com 2019 - 2024. All rights reserved.