我今天基本上等于一整天就想明白了一个lazy evaluation的概念。。。其实部分原因是Dan在讲课的时候少讲了一两句话,如果他多提一嘴本来会是很好理解的。
其实lazy evaluation是什么呢,那要先说eager evaluation,拿函数的求值策略来说,eagerness的策略就是在实现函数的功能之前先算函数的参数,这样如果有很难算的参数甚至是递归的参数,那么计算量会非常大,甚至递归的参数如果是根据判定条件停止的话,因为函数的功能没有引入,所以递归并不会停而是会一直递归下去。
对应的,laziness就是只有判断出你这个表达式确实会被用到,才会真的去计算,否则是不会去做无用的计算的。
至于laziness好处都有啥,说实话我不晓得。某些情况减少计算量是自然的,但也只是某些情况而已。
话说最近stanford algo的deadline又来了,所以准备同步搞一搞algo的part 2。感觉最近一直搞functional programming把自己搞得头都大了,进度也越来越慢,听听光头哥吹吹b正好换换思路。