Blob
1 (defun ripple-carry-adder (la lb ls c)2 (let ((n (length la)))3 (unless (= n (length lb) (length ls))4 (error "Expecting all lists of same length"))5 (labels ((ripple-build (la lb lcin ls lcout)6 (unless (null la)7 (full-adder (car la) (car lb) (car lcin)8 (car ls) (car lcout))9 (ripple-build (cdr la) (cdr lb) (cdr lcin)10 (cdr ls) (cdr lcout)))))11 (let ((lcin '()) (lcout '()))12 (dotimes (i n)13 (let ((ci (make-wire)))14 (push ci lcin)15 (push ci lcout)))16 (push c lcout)17 (ripple-build la lb lcin ls lcout)))))