diff options
| author | Steve Lee <me@xiangyangli.com> | 2017-12-02 06:10:20 +0800 |
|---|---|---|
| committer | Steve Lee <me@xiangyangli.com> | 2017-12-02 06:10:20 +0800 |
| commit | 9b939e65cf007e859dabe5de6b31d255d647e0ce (patch) | |
| tree | bf9229755f4e58bb81add73c7f3c32fe4023e7ec /Computer_Science/SICP/ex2-2.scm | |
| parent | 5dc061ae68ac3b5b28556bdbd1574579d8da33e7 (diff) | |
| download | 42-9b939e65cf007e859dabe5de6b31d255d647e0ce.tar.xz 42-9b939e65cf007e859dabe5de6b31d255d647e0ce.zip | |
category
Diffstat (limited to 'Computer_Science/SICP/ex2-2.scm')
| -rw-r--r-- | Computer_Science/SICP/ex2-2.scm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Computer_Science/SICP/ex2-2.scm b/Computer_Science/SICP/ex2-2.scm new file mode 100644 index 0000000..3a66fd3 --- /dev/null +++ b/Computer_Science/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) |
