- 论坛徽章:
- 3
|
本帖最后由 captivated 于 2012-10-28 12:33 编辑
回复 22# OwnWaterloo
嗯. 我了解了, 就是说, Lazy是normal-order(就是先展开, 最后才化简, outer优先). 但是Lazy同时又能够避免重复计算(outer优先的还不是Lazy), 是这样子吗?
update: outer优先还不是"先展开 最后才化简"这种简单描述. inner优先还是outer优先, 是说先展开"函数", 还是先展开"参数". 先展开"参数"是inner优先. 先展开"函数"是outer优先. 所以inner优先和outer优先是更精确的表述.
update: --> 希望OwnWaterloo说一声: "you got it!"(前提是我确实got it), o(∩_∩)o 哈哈
update:- (define (double x) (+ x x))
- (define (square x) (* x x))
- (square (double 3))
复制代码 可以优先化简inner (square (+ 3 3)) ; (square 6) ; (* 6 6) ; 36
--> 即先求值参数后应用, (double 3)是(+ 3 3) --> 6, (square 6) --> (* 6 6) --> 36, 这个是书上的applicative-order
也可以优先化简 outer (* (double 3) (double 3)) ; (* (+ 3 3) (+ 3 3)) ; (* 6 6) ; 36
--> 这个是normal-order
|
|