Blame


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