我在知乎上回答了惰性求值

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 网站将来编程语言方面的内容会有一些。

This entry was posted in Uncategorized. Bookmark the permalink.