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)))))))