Evaluation Schemes¶
主要有这几种 evaluation scheme:
- full beta-reduction
- 只要是 
(lambda x. t1) t2的形式,就可以 reduce 
 - 只要是 
 - normal order
- 优先 reduce outermost, leftmost。如果没有,那就再考虑其它的形式。
 
 - call by name
- 不允许在 abstraction 内部进行 reduce (i.e. 
t1 t2orlambda z. t2的 t2,被禁止 reduce) 
- variants used by ALGOL-60 and Haskell: call by need
 
 - 不允许在 abstraction 内部进行 reduce (i.e. 
 - call by value
- 和 call by name 正相反。
lambda z. t2仍然禁止 reduce,但是t1 t2中,必须先 reduce t2,才能进一步 reduce 左侧的 
 - 和 call by name 正相反。
 
本书中,我们使用 call-by-value 策略。因为 call-by-value 应用最广泛,而且很容易扩展到 reference 以及 exception。