(wat-aro)

無職から有職者にランクアップしました

SICP 問題 3.30

;; 最後のfull-adderのc-inは0.
;; (make-wire)の初期値は0と仮定してます.
(define (ripple-carry-adder Ak Bk Sk C)
  (let ((c-in (make-wire)))
    (cond ((null? (cdr Ak))
           (full-adder (car Ak) (car Bk) 0 (car Sk) C)
           'ok)
          (else
           (full-adder (car Ak) (car Bk) c-in (car Sk) C)
           (ripple-carry-adder (cdr Ak) (cdr Bk) (make-wire) (cdr Sk) c-in)))))