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