問題3.36 – SICP(計算機プログラムの構造と解釈)その134
問題3.36 (define a (make-connector)) (define b (make-connector)) (set-value! a 10 ‘user) gosh> done a と b のコネクタを定義すると、手続き make-connector が実行されて、それぞれのコネクタの環境 E1 と E2 が作られる。 コネクタ a に値を設定すると、環境 E1 に val…続きを読む
問題3.36 (define a (make-connector)) (define b (make-connector)) (set-value! a 10 ‘user) gosh> done a と b のコネクタを定義すると、手続き make-connector が実行されて、それぞれのコネクタの環境 E1 と E2 が作られる。 コネクタ a に値を設定すると、環境 E1 に val…続きを読む
問題3.35 (define (squarer a b) (define (process-new-value) (if (has-value? b) (if (< (get-value b) 0) (error "square less than 0 — SQUARER" (get-value b)) (set-value! a (sqrt (get-value b)…続きを読む
問題3.34 multiplier の process-new-value 手続きに、いずれの条件式にも一致しなかった場合にメッセージを印字するように修正する。 (define (multiplier m1 m2 product) (define (process-new-value) (cond ((or (and (has-value? m1) (= (get-value m1) 0)) (a…続きを読む
問題3.33 制約ネットワークで表した、a + b = 2 * c の図。 (define (averager a b c) (let ((u (make-connector)) (x (make-connector))) (adder a b u) (multiplier c x u) (constant 2 x) ‘ok)) (define A (make-connector)) (defin…続きを読む
問題3.32 agenda のデータ構造 (define the-agenda (make-agenda)) (define and-gate-delay 3) (define a (make-wire)) (define b (make-wire)) (define c (make-wire)) (probe ‘c c) (and-gate a b c) (set-signal! b 1) (p…続きを読む
問題3.31 (define the-agenda (make-agenda)) (define inverter-delay 2) (define and-gate-delay 3) (define or-gate-delay 5) (define input-1 (make-wire)) (define input-2 (make-wire)) (define sum (make-wire))…続きを読む
問題3.30 繰上り伝播加算器 (define (ripple-carry-adder list-a list-b list-sum c-out) (define (iter list-a list-b list-sum c-in) (if (not (null? list-a)) (let ((c-out (make-wire))) (full-adder (car list-a) (car l…続きを読む
問題3.29 (define (or-gate a b output) (let ((c (make-wire)) (d (make-wire)) (e (make-wire))) (inverter a c) (inverter b d) (and-gete c d e) (inverter e output) ‘ok)) 遅延時間は、2*inverter-delay + and-gate-de…続きを読む
問題3.28 (define (or-gate o1 o2 output) (define (or-action-procedure) (let ((new-value (logical-or (get-signal o1) (get-signal o2)))) (after-delay or-gate-delay (lambda () (set-signal! output new-value)…続きを読む
問題3.27 (define (memoize f) (let ((table (make-table))) (lambda (x) (let ((previously-computed-result (lookup x table))) (or previously-computed-result (let ((result (f x))) (insert! x result table) (d…続きを読む