blob: 3a66fd34d6b152bce8ea841c717d1254cd880b00 (
plain)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
(define (make-point x y) (cons x y))
(define (x-point x) (car x))
(define (y-point x) (cdr x))
(define (point-add x y)
(make-point
(+ (x-point x) (x-point y))
(+ (y-point x) (y-point y))))
(define (make-segment start-point end-point)
(cons start-point end-point))
(define (start-segment segment) (car segment))
(define (end-segment segment) (cdr segment))
(define (midpoint-segment segment)
(make-point
(/ (+ (x-point (start-segment segment))
(x-point (end-segment segment)))
2)
(/ (+ (y-point (start-segment segment))
(y-point (end-segment segment)))
2)))
(define (print-point p)
(newline)
(display "(")
(display (x-point p))
(display ",")
(display (y-point p))
(display ")"))
;Ex2-3 without abstraction barries;
(define point-a (make-point 1 3))
(define point-b (make-point 11 9))
(define segment-a (make-segment point-a point-b))
(define midpoint-a (midpoint-segment segment-a))
(print-point (make-point 1 2))
(print-point (end-segment segment-a))
(print-point (midpoint-segment segment-a))
(define (make-rectangle pointA pointB) (cons pointA pointB))
(define (right-top-point rectangle)
(cdr rectangle))
(define (left-bottom-point rectangle)
(car rectangle))
(define (calculate-perimeter rectangle)
(* 2 (+ (- (y-point (right-top-point rectangle))
(y-point (left-bottom-point rectangle)))
(- (x-point (right-top-point rectangle))
(x-point (left-bottom-point rectangle))))))
(define (calculate-area rectangle)
(* (- (y-point (right-top-point rectangle))
(y-point (left-bottom-point rectangle)))
(- (x-point (right-top-point rectangle))
(x-point (left-bottom-point rectangle)))))
(define rectangleA (make-rectangle point-a point-b))
(calculate-perimeter rectangleA)
(calculate-area rectangleA)
;Ex2-3 with abstraction barriers.
;Use left-bottom-point and right-top-point as abstraction barriers.
(define (make-rectangle pointA len width)
(cons pointA (cons len width)))
(define (left-bottom-point rectangle)
(car rectangle))
(define (right-top-point rectangle)
(make-point
(+ (x-point (car rectangle)) (car (cdr rectangle)))
(+ (y-point (car rectangle)) (cdr (cdr rectangle)))))
(define (calculate-perimeter rectangle)
(* 2 (+ (- (y-point (right-top-point rectangle))
(y-point (left-bottom-point rectangle)))
(- (x-point (right-top-point rectangle))
(x-point (left-bottom-point rectangle))))))
(define (calculate-area rectangle)
(* (- (y-point (right-top-point rectangle))
(y-point (left-bottom-point rectangle)))
(- (x-point (right-top-point rectangle))
(x-point (left-bottom-point rectangle)))))
(define rectangleB (make-rectangle point-a 10 10))
(left-bottom-point rectangleB)
(right-top-point rectangleB)
(calculate-area rectangleB)
(calculate-perimeter rectangleB)
|