SICP 問題1.31

2017-08-30

1.3.1 引数としての手続き - 計算機プログラムの構造と解釈 第二版

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

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

前回までの sum 手続きは「与えられた範囲の点での関数値の和を返す手続き」だと思うので、今回は積verを作りましょうという問題。

(define (product term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (* (term a) result))))
  (iter a 1))

こういうことかな?

次に factorial 手続きを書く。

(define (factorial n)
  (define (inc n) (+ n 1))
  (product + 1 inc n))

次に提示されてる式を使って、πの近似値を計算するのにproductを使え.はわからんのでスキップ。

b.をやる。僕は反復的プロセスで書いたので再帰的プロセスで書く。

(define (product term a next b)
  (if (> a b)
      1
      (* (term a) (product term (next a) next b))))