Code Review
Compare your solutions
(define (mul-interval x y)
(let ((lx (lower-bound x))
(ux (upper-bound x))
(ly (lower-bound y))
(uy (upper-bound y)))
(cond ((and (>= lx 0) (>= ly 0)) (make-interval (* lx ly) (* ux uy)))
((and (< ux 0) (< uy 0)) (make-interval (* ux uy) (* lx ly)))
((and (< ux 0) (>= ly 0)) (make-interval (* lx uy) (* ux ly)))
((and (>= lx 0) (< uy 0)) (make-interval (* ux ly) (* lx uy)))
((and (< ux 0) (< ly 0)) (make-interval (* lx uy) (* lx ly)))
((and (< uy 0) (< lx 0)) (make-interval (* ux ly) (* lx ly)))
((and (>= ly 0) (< lx 0)) (make-interval (* uy lx) (* uy ux)))
((and (>= lx) (< ly 0)) (make-interval (* ux ly) (* ux uy)))
(else (make-interval (min (* lx uy) (* ly ux)) (max (* lx ly) (ux uy)))))))