【发布时间】:2012-03-27 19:59:43
【问题描述】:
在Concrete Abstractions中有这个递归的例子:
(define subtract-the-first (lambda (n)
(if (= n 0) 0
(- (subtract-the-first (- n 1)) n))))
这个我明白。例如,如果 n = 3,则此函数的计算结果为:
(- (+ (+ (+ 1) 2) 3)) -> -6
但是,在后续示例之一中,应该解释为什么无法切换操作顺序。例如,让我们看一下:
(define subtract-the-first2 (lambda (n)
(if (= n 0) 0
(- n (subtract-the-first2 (- n 1))))))
如果我调用 (subtract-the-first2 4),结果是 2。但是,我不太了解评估。显然,我在这里犯了一个错误,因为看到这个:
(- 4 (+ 3 (+ 2 (+ 1))) ),等于 (- 4 6),因此计算结果为 -2。
感谢任何指点,因为我已经把我的头撞到墙上半小时左右了......
谢谢!
【问题讨论】:
标签: scheme