Код Ревью
Сравни свои решения
#| BEGIN (Write your solution here) |#
(define (mul-interval x y)
(let ((lx (lower-bound x))
(ux (upper-bound x))
(ly (lower-bound y))
(uy (upper-bound y)))
(cond
; both intervals >= 0
((and (>= lx 0) (>= ly 0))
(make-interval (* lx ly) (* ux uy)))
; x >= 0, y <= 0
((and (>= lx 0) (<= uy 0))
(make-interval (* ux ly) (* lx uy)))
; x >= 0, y spans zero
((and (>= lx 0) (< ly 0) (> uy 0))
(make-interval (* ux ly) (* ux uy)))
; x <= 0, y >= 0
((and (<= ux 0) (>= ly 0))
(make-interval (* lx uy) (* ux ly)))
; both intervals <= 0
((and (<= ux 0) (<= uy 0))
(make-interval (* ux uy) (* lx ly)))
; x <= 0, y spans zero
((and (<= ux 0) (< ly 0) (> uy 0))
(make-interval (* lx uy) (* lx ly)))
; x spans zero, y >= 0
((and (< lx 0) (> ux 0) (>= ly 0))
(make-interval (* lx uy) (* ux uy)))
; x spans 0, y <= 0
((and (< lx 0) (> ux 0) (<= uy 0))
(make-interval (* ux ly) (* lx ly)))
; both intervals span zero - general case
(else
(let ((p1 (* lx ly))
(p2 (* lx uy))
(p3 (* ux ly))
(p4 (* ux uy)))
(make-interval (min p1 p2 p3 p4)
(max p1 p2 p3 p4)))))))
#| END |#