; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 03/05/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================
;; SICP No.1.31
;; 递归版本
(define (product-r term a next b)
(if (> a b)
1
(* (term a)
(product-r term (next a) next b))))
;; 迭代版本
(define (product-i term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (* result (term a)))))
(iter a 1))
;; 阶乘
(define (factorial n)
(define (term i) i)
(define (next i) (+ i 1))
(product-i term 1 next n))
;; 求pi
(define (john-wallis-pi n)
(define (term i) (/ (* (* 2 i) (* 2 (+ i 1)))
(square (+ 1 (* 2 i)))))
(define (next i) (+ i 1))
(* (product-i term 1 next n) 4.0))
;; Test-it:
;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.
;; > (factorial 5)
;; 120
;; > (factorial 10)
;; 3628800
;; > (john-wallis-pi 10)
;; 3.2137849402931895
;; > (john-wallis-pi 100)
;; 3.1493784731686008
;; > (john-wallis-pi 1000)
;; 3.142377365093878
;; > (john-wallis-pi 10000)
;; 3.1416711865344635
;; > (john-wallis-pi 100000)
;; 3.1416005075027056