問題1.31a、問題1.31b – SICP(計算機プログラムの構造と解釈)その14
2008年11月19日
問題1.31 a
sum
手続きとほぼ同じ形で表せる(+
が *
になる)。
ただし、a > b
の際の戻り値が1となる。
(define (product term a next b)
(if (> a b)
1
(* (term a) (product term (next a) next b))))
product
を使って factorial
を書く。
(define (factorial n)
(define (next i) (+ i 1))
(define (term i) i)
(product term 1 next n))
(factorial 10)
gosh> factorial
gosh> 3628800
πの近似値の計算
(define (pi1 n)
(define (next i) (+ i 1))
(define (f k)
(if (even? k)
(/ (+ k 2) (+ k 1))
(/ (+ k 1) (+ k 2))))
(* 4.0 (product f 1 next n)))
(pi1 10)
(pi1 100)
(pi1 1000)
gosh> pi1
gosh> 3.2751010413348074
gosh> 3.1570301764551676
gosh> 3.1431607055322663
問題1.31 b
反復的プロセスで product
を書き直す。
(define (product2 term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (* (term a) result))))
(iter a 1))
πの近似値の計算
(define (pi2 n)
(define (next i) (+ i 1))
(define (f k)
(if (even? k)
(/ (+ k 2) (+ k 1))
(/ (+ k 1) (+ k 2))))
(* 4.0 (product2 f 1 next n)))
(pi2 10)
(pi2 100)
(pi2 1000)
gosh> pi2
gosh> 3.2751010413348074
gosh> 3.1570301764551676
gosh> 3.1431607055322663
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542