aboutsummaryrefslogtreecommitdiff
path: root/Computer_Science/SICP/ex2-2.scm
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)