問題1.31a、問題1.31b – SICP(計算機プログラムの構造と解釈)その14
問題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 (fac…続きを読む
問題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 (fac…続きを読む
問題1.30 線形再帰の sum 手続き (define (sum1 term a next b) (if (> a b) 0 (+ (term a) (sum1 term (next a) next b)))) a から b までの整数の和(線形再帰手続き) (define (sum-integers1 a b) (define (identify x) x) (define (inc x…続きを読む
問題1.27 パス 問題1.28 パス 問題1.29 うーん、Simpsonの公式を使った方が精度が落ちているような気がする… (define (cube x) (* x x x)) (define (inc x) (+ x 1)) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) n…続きを読む
問題1.24 計算量は Θ(log n) の増加なので 1,000:1,000,000 は 1:2 程度と予想される。 結果を見ると 1:4 ぐらいになっている。 (define (square n) (* n n)) (define (smallest-divisor n) (find-divisor n 2)) (define (find-divisor n test-divisor…続きを読む
問題1.21 (define (square n) (* n n)) (define (smallest-divisor n) (find-divisor n 2)) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divis…続きを読む
問題1.19 p’ : (+ (* p p) (* q q)) q’ : (+ (* 2 p q) (* q q)) 問題1.20 (define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) 正規順序の置き換えの場合。赤字部分が実行される remainder。 remainder を rem と省略表記している。 18回。 (gcd 206 …続きを読む
問題1.16 不変量 ab^n について、答えを見れば「ああ、そういうことか」と解るけれども、自分の頭ではこのような計算が思い浮かばない… (define (fast-expt-iter b n) (expt-iter b n 1)) (define (expt-iter b n a) (cond ((= n 0) a) ((even? n) (expt-iter (* b b) (/…続きを読む
問題1.14 (define (count-change amount) (cc amount 5)) (define (cc amount kinds-of-coins) (cond ((= amount 0) 1) ((or (< amount 0) (= kinds-of-coins 0)) 0) (else (+ (cc amount (- kinds-of-coins 1)) (c…続きを読む
問題1.12 パスカルの三角形(Pascal’s triangle)の上から n 行目、左から k 番目の値を求める式。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 (define (pascals-triangle n k) (if (or (= n k) (= k 1)) 1 (+ (pascals-tr…続きを読む
1.2.2 木構造再帰 木構造再帰的プロセスの (fib n)。 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) (fib 4) (+ (fib (- 4 1)) (fib (- 4 2))) (+ (fib 3) (fib 2)) (+ (+ (fib (- 3 1)) …続きを読む