http://www.zhihu.com/question/20009057/answer/44332778
我理解的惰性求值就是程序代码没有先后顺序。如下:
a = b + 1
b = 1
可以先引用,后定义。
这样,python和ruby的惰性序列,和惰性求值无关,只是一种程序性能优化。dlang的惰性参数,我没理解,iolanguage的惰性求值我知道,就是一种宏定义方法,也和惰性求值无关。
确实,能定义函数的语言都有惰性求值功能,函数定义就是惰性求值。只是,很多编程语言区分函数和变量,这样,写出来的代码很难看,有很多括号。比如
def a():
return b()+1
def b():
return 1
iolanguage、rebol是不区分函数和变量的,smalltalk有可能也是,这样就好看多了:
a := method(b+1)
b := method(1)
racket有一个方言,就是惰性求值的,我还没搞懂这个惰性求值的方言怎么和其它语言混合编程。
毕竟是过程式编程语言,haskell的where是实现不了的,其它编程语言哪个有where请告诉我,看haskell:
a = b + 1 where
b=1
只有where才符合人的思维,先标题后内容,就像写文章一样。过程式的编程语言如果习惯了看程序从后往前看,也是一样。
其实惰性求值不难实现,只要在原有语言基础上新建一个语言就行了,就像coffeescript和javascript的关系那样。
我的网站: tomzheng.com 网站将来编程语言方面的内容会有一些。