-
Notifications
You must be signed in to change notification settings - Fork 1
/
Exercise 2.8 sub-interval.rkt
executable file
·52 lines (43 loc) · 1.22 KB
/
Exercise 2.8 sub-interval.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#lang racket
; Exercise 2.8. Using reasoning analogous to Alyssa's, describe how the difference of two
; intervals may be computed. Define a corresponding subtraction procedure, called sub-interval.
; SOLUTION
(define (make-interval a b)
(cons a b)
)
(define (upper-bound interval)
(cdr interval)
)
(define (lower-bound interval)
(car interval)
)
(define (add-interval x y)
(make-interval
(+ (lower-bound x) (lower-bound y))
(+ (upper-bound x) (upper-bound y))
)
)
(define (sub-interval x y)
(make-interval
(- (lower-bound x) (upper-bound y))
(- (upper-bound x) (lower-bound y))
)
)
; Tests
> (sub-interval (make-interval 40 50) (make-interval 10 20))
'(20 . 40)
> (sub-interval (make-interval 40 50) (make-interval 10 40))
'(0 . 40)
> (sub-interval (make-interval 40 50) (make-interval 10 45))
'(-5 . 40)
> (sub-interval (make-interval 40 50) (make-interval 10 55))
'(-15 . 40)
> (sub-interval (make-interval 40 50) (make-interval 40 55))
'(-15 . 10)
> (sub-interval (make-interval 40 50) (make-interval 45 55))
'(-15 . 5)
> (sub-interval (make-interval 40 50) (make-interval 50 55))
'(-15 . 0)
> (sub-interval (make-interval 40 50) (make-interval 55 60))
'(-20 . -5)
>