問題3.12、問題3.13 – SICP(計算機プログラムの構造と解釈)その113
問題3.12 append を使って連結した場合。 append! を使って連結した場合。 問題3.13 (define (make-cycle x) (set-cdr! (last-pair x) x) x) (define z (make-cycle (list ‘a ‘b ‘c))) z gosh> #0=(a b c . #0#) (define z (make-cycle (lis…続きを読む
問題3.12 append を使って連結した場合。 append! を使って連結した場合。 問題3.13 (define (make-cycle x) (set-cdr! (last-pair x) x) x) (define z (make-cycle (list ‘a ‘b ‘c))) z gosh> #0=(a b c . #0#) (define z (make-cycle (lis…続きを読む
問題3.11 (define acc (make-account 50)) の評価結果の環境構造。 ((acc ‘deposit) 40) の評価結果の環境構造。 ((acc ‘withdraw) 60) の評価結果の環境構造。 (define acc2 (make-account 100)) の評価結果の環境構造。 計算機プログラムの構造と解釈 posted with amazlet at 08…続きを読む
問題3.9 1.2.1節の階乗を計算する手続きの再帰版・反復版の環境構造。 問題3.10 (define W1 (make-withdraw 100)) の評価結果の環境構造。 手続きオブジェクト W1 を作用させて作り出される環境。 W1 呼び出し後の環境。 (define W2 (make-withdraw 100)) を使い2番目のオブジェクトを作り出した時の環境構造。 計算機プログラムの構…続きを読む
問題3.8 引数が 0 の場合に内部変数 x を 0 にする手続き。 (define f (let ((x 1)) (lambda (n) (if (= n 0) (begin (set! x 0) x) x)))) ;; 左から右に評価する場合 (f 0) gosh> 0 (f 1) gosh> 0 ;; したがって (+ (f 0) (f 1)) は (+ 0 0) gosh>…続きを読む
問題3.7 最初に考えた解答 パスワードをリストにして、複数のパスワードが利用出来るようにする。 パスワード追加手続き add-password を定義する。 パスワードのリストから一致するパスワードを探す correct-password? を定義する。 (define (make-account balance password) (define (withdraw amount) (if (…続きを読む
問題3.6 (use srfi-27) ;; for random-integer (define (rand-update x) (remainder (+ x 1812433253) 4294967296)) (define rand (let ((x 1)) (define (reset new-value) (set! x new-value) x) (define (generate) …続きを読む
問題3.5 (use srfi-27) ;; for random-integer (define (random-in-range low high) (let ((range (- high low))) (+ low (random-integer range)))) (define (monte-carlo trails experiment) (define (iter trails-r…続きを読む
問題3.3 (define (make-account balance password) (define (withdraw amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds")) (define (deposit a…続きを読む
問題3.1 (define (make-accumulator sum) (lambda (n) (begin (set! sum (+ sum n)) sum))) (define A (make-accumulator 5)) (A 10) ;gosh> 15 (A 10) ;gosh> 25 問題3.2 (define (make-monitored f) (let ((coun…続きを読む
問題2.95 多項式用の gcd-term 手続きにトレースのための記述を追加する。 (define (gcd-terms a b) (display (list ‘gcd-terms a b)) (newline) (if (empty-termlist? b) a (gcd-terms b (remainder-terms a b)))) 実行結果 (define p1 (make-polyn…続きを読む