首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在像JavaScript这样的非函数式语言中,急切的和懒惰的评估之间的区别是什么?

在像JavaScript这样的非函数式语言中,急切的和懒惰的评估之间的区别是什么?
EN

Stack Overflow用户
提问于 2019-02-18 20:03:04
回答 1查看 1.3K关注 0票数 0

在函数式编程中,我了解到懒惰评估和急切的评估会产生相同的结果(编程语言:应用程序和解释手册)。因此,可以在不产生意外结果的情况下更改计算语义。

但是,在像JavaScript这样的非功能和工业编程语言中,我不认为这两种语义都会产生结果。例如,如果方法object.f(x)返回依赖于对象状态(例如生存期)的值,则懒惰和急切的计算可能返回不同的值。此外,在函数式编程中,如果函数f(x)返回一个取决于例如CPU温度的值,我们也可能会有不同的结果。

那么,懒惰和急切的评估会产生不同的结果吗?即使在函数式编程语言中。

EN

回答 1

Stack Overflow用户

发布于 2019-03-04 19:59:02

在函数式编程中,我了解到懒惰评估和急切的评估会产生相同的结果(编程语言:应用程序和解释手册)。因此,可以在不产生意外结果的情况下更改计算语义。

上述说法是错误的。懒惰评估和急切评价并不总是产生相同的结果,下面的例子证明了这一点。Haskell代码(惰性评估):

代码语言:javascript
复制
> let forever x = forever x
> const 10 (forever 20)
10

OCaml代码(急切的评估):

代码语言:javascript
复制
# let const a b = a;;
val const : 'a -> 'b -> 'a = <fun>
# let rec forever x = forever x;;
val forever : 'a -> 'b = <fun>
# const 10 (forever 20);;
^CInterrupted.

正如您所看到的,相同的表达式在惰性语言中生成结果10,而在急切的语言中则进入无限循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档