問題1.31

a.
sum手続きは高階手続きとして書ける,同様な数多い抽象の最も単純なものに過ぎない.与えられた範囲の点での関数値の積を返すproductという似た手続きを書け.productを使って,factorialを定義せよ.また式

π/4 = (2*4*4*6*6*8...)/(3*3*5*5*7*7...)


によってπの近似値を計算するのにproductを使え.

b.
上のproductが再帰的プロセスを生成するなら,反復的プロセスを生成するものを書け.反復的プロセスを生成するなら,再帰的プロセスを生成するものを書け.

--

; --                                                                                                                          ; 標準的関数をロード                                                                                                          ; --                                                                                                                          (load "./util.scm"); --                                                                                                                          ; 再帰的なproductの実装                                                                                                       ; --                                                                                                                          (define (product-rec term a next b)  (if (> a b)      1      (* (term a)         (product-rec term (next a) next b))))(print "再帰的な計算(2): " (product-rec identity 1 inc 2)) ; (factorial 2)                                                    (print "再帰的な計算(3): " (product-rec identity 1 inc 3)) ; (factorial 3)                                                    (print "再帰的な計算(4): " (product-rec identity 1 inc 4)) ; (factorial 4)                                                    ; --                                                                                                                          ; πを近似する(バグってるぽい...)                                                                                            ; --                                                                                                                          (define (plus2 n)  (+ n 2))(print (* (/ (* 2 (square (product-rec identity 4 plus2 10000))) (square (product-rec identity 3 plus2 10001))) 4)); --                                                                                                                          ; 反復的なproductの実装                                                                                                       ; --                                                                                                                          (define (product-rep term a next b)  (define (iter a result)    (if (> a b)        result        (iter (next a) (* result (term a)) )))  (iter a 1))(print "反復的な計算(2): " (product-rep identity 1 inc 2)) ; (factorial 2)                                                    (print "反復的な計算(3): " (product-rep identity 1 inc 3)) ; (factorial 3)                                                    (print "反復的な計算(4): " (product-rep identity 1 inc 4)) ; (factorial 4) 


再帰的なproductと反復的なproductは実装できたが、πの近似値がでない。とても大きい値が返る。後でSICP読書会にてスーパーハッカー達に質問して、追記する。

amazon
『計算機プログラムの構造と解釈』