之前在SICP上看到一个很厉害的东西,考虑三个问题:
计算从 a 到 b 间所有整数的和
计算从 a 到 b 间所有整数的三次方之和
求解序列
\(\frac{1}{1 \cdot 3} + \frac{1}{5 \cdot 7} + \frac{1}{9 \cdot 11} + ....\)
下面的三段代码可以分别解决这三个问题
(define (sum-integers a b)
(cond ((> a b) 0)
(else (+ a (sum-integers (+ a 1) b)))))
(define (sum-cubes a b)
(define (cube k)
(* k k k))
(cond ((> a b) 0)
(else (+ (cube a) (sum-cubes (+ a 1) b))))
)
(define (pi-sum a b)
(cond ((> a b) 0)
(else (+ (/ 1.0 (* a (+ a 2))) (pi-sum (+ a 4) b)))))
虽然解决的是不同的问题,但是在代码中却存在相似的结构,即如下所示
(define ( a b)
(cond ((> a b) 0)
(else (+ ( a) ( ( a) b)))))
也就是说,同样是求和过程,但是不同的细节操作可以表达出不同的算法需求,如果我们将特定的操作(比如func、inc) 这些函数作为参数传入高阶函数,那么就能得到更具表达力的过程。
(de