惰性求值-Lazy evaluation

来源:互联网 发布:大数据学的是什么 编辑:程序博客网 时间:2024/05/21 21:36

惰性方法是指一系列嵌套的方法的求值被延迟到一个求值(方法|表达式)的出现。
用haskell做说明的话

print (drop 2 "abcd")

drop 不是一个求值方法,而print 是一个求值方法,所以其实是print 导致了 (drop 2 “abcd”)被求值。

在上面这种简单的情况下可能看不出惰性求值的作用,我们看一个比较复杂的例子

sum (takeWhile (<10000) [m | m <- [n^2 | n <- [1..]], odd m])

[1..]代表一个无限长的list,可想而知,如果他先被求值的话,整个程序就会立即崩溃了。
上面的最终求值方法是sum,takeWhile ,方法是先从最外面执行,而里面的一堆方法,会被看成一个需要被求值的块,直到真正需要值的时候之前,求值块不会被求值,所以等到[1..]需要被求值的时候,是用takeWhile (<10000)来对他进行求值,保证他只有10000个元素,而不是一个无限长的list。

惰性求值有很多好处,java8的流类也是惰性求值的,用过的人应该会比较清楚,stream是不会被直接求值的,除非对它使用一个终止方法,例如collect,而在调用求值方法的时候,之前积累的方法可以被优化,例如filter,map可能会被压缩到一次循环中,而在非惰性求值中,就是两次循环。

惰性求值一般常出现于函数式语言,或者某些语言的函数式框架中,像java8的stream,rxjava之类的


我的github
https://github.com/luckyCatMiao

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 取痣哪家医院好 医院取痣大概多少钱 取痣的价格 哪里取痣好 去医院取痣要多少钱 取痣一般多少钱一颗 哪个医院取痣好 取痣哪个医院好 取痣那个医院好 去痣哪种方法好 夏天取痣好不好 取脸上的痣 取痣疼不疼 取痣哪里好 哪种去痣方法好 取痣要多少钱一颗 鼻下有痣 取脸上痣 鼻根有痣 在哪里取痣好 取痣 多少钱 取痣哪种方法好 取痣那里好 哪家医院取痣好 痣和痦子的区别 怎么取脸上的痣 怎样祛除黑痣 怎样才能取痣 中医去痣 面部哪些痣不能取 那里取痣好 那里有取痣的 善痣恶痣 取痣大概需要多少钱 怎么样取痣 痦子与痣的区别 医院取痣多少钱一颗 取一颗痣多少钱 取痣有哪些方法 两眉之间的痣 取痣注意事项