aboutsummaryrefslogtreecommitdiff
path: root/SICP/ex2-2.scm
diff options
context:
space:
mode:
Diffstat (limited to 'SICP/ex2-2.scm')
-rw-r--r--SICP/ex2-2.scm97
1 files changed, 97 insertions, 0 deletions
diff --git a/SICP/ex2-2.scm b/SICP/ex2-2.scm
new file mode 100644
index 0000000..3a66fd3
--- /dev/null
+++ b/SICP/ex2-2.scm
@@ -0,0 +1,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)