(define (full-adder a b c) (let*-values (((half-adder) (lambda (a b) (let* ((oc (and a b)) (o (and (or a b) (not oc)))) (values o oc)))) ((o1 oc1) (half-adder a b)) ((o oc2) (half-adder o1 c))) (values o (or oc1 oc2))))