- Algol 60为了模仿宏定义的行为,采用了正则序求值,这本书上貌似没详细介绍正则序和应用序。记得SICP(Structures and Interpretation of Computer Programmes)上对这两个概念讲得很详细。所谓正则序,normal-order,是一种’fully expand and then reduce’的计算方式。举个SICP上的计算例子
1 2 3 4 5 6 | |
而应用序则是’evaluate the arguments then apply’。 P.S GeSHi默认的lisp着色怎么是这样的 =_=
- 惰性求值。应用序通常会更高效一点,但有时会出现不必要运行出错的情况,比如SICP中的习题1.5
1 2 3 4 5 6 | |
在应用序求值的情况下是会出现不必要的死循环的。于是有了折中的惰性求值lazy evaluation,需要的时候再求值。
一个用途就是创建惰性数据结构,Scheme手册中的一个例子,创建了一个表,内容是所有的自然数:
1 2 3 4 5 6 7 8 9 | |
Haskell中求值没有任何副作用,所有的参数都采用惰性求值。
[417/899]