Skip to content

Instantly share code, notes, and snippets.

@kouddy
Last active August 29, 2015 14:18
Show Gist options
  • Save kouddy/b647bbd8990f5af370ea to your computer and use it in GitHub Desktop.
Save kouddy/b647bbd8990f5af370ea to your computer and use it in GitHub Desktop.
(define (+? x) (>= x 0)) ;;; Is x a positive number?
(define (-? x) (< x 0)) ;;; Is x a negative number?
(define (make-interval a b) (cons a b))
(define (lower-bound i) (car i))
(define (upper-bound i) (cdr i))
(define (mul-interval x y)
(let ((a (lower-bound x))
(b (upper-bound x))
(c (lower-bound y))
(d (upper-bound y)))
(cond ((and (+? a) (+? b) (+? c) (+? d)) (make-interval (* a c) (* b d)))
((and (+? a) (+? b) (-? c) (+? d)) (make-interval (* b c) (* b d)))
((and (+? a) (+? b) (-? c) (-? d)) (make-interval (* b c) (* a d)))
((and (-? a) (+? b) (+? c) (+? d)) (make-interval (* a d) (* b d)))
((and (-? a) (+? b) (-? c) (+? d))
(let ((p1 (min (* a d) (* b c)))
(p2 (max (* a c) (* b d))))
(make-interval p1 p2)))
((and (-? a) (+? b) (-? c) (-? d)) (make-interval (* b c) (* a c)))
((and (-? a) (-? b) (+? c) (+? d)) (make-interval (* a d) (* b c)))
((and (-? a) (-? b) (-? c) (+? d)) (make-interval (* a d) (* a c)))
((and (-? a) (-? b) (-? c) (-? d)) (make-interval (* b d) (* a c))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment