問題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読書会にてスーパーハッカー達に質問して、追記する。

コメント一覧
この記事にコメントしてください
(*) は必須入力項目です。