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))))