計算機プログラムの構造と解釈 第二版 P163 問題3.30

全加算機を何個もつなげる感じの問題。


シンプルに考えればいいかなと思って以下。

(define (ripple-carry-adder A B S C)
  (if (null? S) 'ok 
    (let ((c-out (make-wire)))
      (full-addr (car A) (car B) C (car S) c-out)
      (ripple-carry-adder (cdr A) (cdr B) (cdr S) c-out))))


遅延は、full-addr分が、

half-adder-delay = and-gate-delay * 2 + or-gate-delay + inverter-delay
full-adder-delay = half-adder *2 + or-gate-delay

nビットだと

n * full-adder-delay = n * (half-adder * 2 + or-gate-delay)
                                = n * ( (and-gate-delay * 2 + or-gate-delay + inverter-delay) * 2 + or-gate-delay)
                                 = n * ( and-gate-delay * 4 + or-gate-delay * 3 + inverter-delay *2)

って感じかと思われる。


動かしてないから動くのかどうかよくわからないな。