1.31
练习 1.31
a) 过程sum是可以用高阶过程表示的大量类似抽象中最简单的一个。请写出一个类似的称为product的过程,它返回在给定范围中各点的某个函数值的乘积。请说明如何用product定义factorial。另请按照下面公式计算的近似值:
b) 如果你的product过程生成的是一个递归计算过程,那么请写出一个生成迭代计算过程的过程。如果它生成一个迭代计算过程,请写一个生成递归计算过程的过程。
a) 迭代实现:
(define (product term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (* result (term a)))))
(iter a 1))
(define (identity x) x)
(define (inc n) (+ n 1))
(define (factorial n)
(product identity 1 inc n))
(factorial 10)
(define (pi-product a b)
(define (pi-term a)
(/ (* a (+ a 2)) (* (+ a 1) (+ a 1))))
(define (pi-next a)
(+ a 2))
(product pi-term a pi-next b))
(* 4 (pi-product 2 1000))
b) 递归实现:
(define (product term a next b)
(if (> a b)
1
(* (term a)
(product term (next a) next b))))
(define (identity x) x)
(define (inc n) (+ n 1))
(define (factorial n)
(product identity 1 inc n))
(factorial 10)