SICP問題3.30

n個の回線の三つのリスト Ak, Bk, Sk ともう一本の回線 C を引数にとるn個の全加算器をつなげた繰上り伝播加算器(ripple-carry-adder)の定義。
回路図を見ると最後のCn=0になっていて、最初のCになっているので、こんな感じ。

(define (ripple-carry-adder ak bk sk c)
  (if (not (null? ak))
      (let ((c-out (make-wire)))
        (full-adder (car ak) (car bk) c (car sk) c-out)
        (ripple-carry-adder (cdr ak) (cdr bk) (cdr sk) c-out))
      'ok))

遅延は以下のようになる

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