Created
June 28, 2011 12:38
-
-
Save kinoshita-lab/1051047 to your computer and use it in GitHub Desktop.
sicp chapter 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;;; 2.1.1 | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(define (make-rat n d) | |
(cons n d)) | |
(define (numer x) | |
(car x)) | |
(define (denom x) | |
(cdr x)) | |
(define (print-rat x) | |
(newline) | |
(display (numer x)) | |
(display "/") | |
(display (denom x))) | |
(define (add-rat x y) | |
(make-rat (+ (* (numer x) (denom y)) | |
(* (numer y) (denom x))) | |
(* (denom x) (denom y)))) | |
(define (sub-rat x y) | |
(make-rat (- (* (numer x) (denom y)) | |
(* (numer y) (denom x))) | |
(* (denom x) (denom y)))) | |
(define (mul-rat x y) | |
(make-rat (* (numer x) (numer y)) | |
(* (denom x) (denom y)))) | |
(define (div-rat x y) | |
(make-rat (* (numer x) (denom y)) | |
(* (denom x) (numer y)))) | |
(define (equal-rat? x y) | |
(= (* (numer x) (denom y)) | |
(* (numer y) (denom x)))) | |
(define (gcd a b) | |
(if (= b 0) | |
a | |
(gcd b (remainder a b)))) | |
(define (make-rat n d) | |
(let ((g (gcd n d))) | |
(cons (/ n g) (/ d g)))) | |
;; exercise 2.1 | |
(define (make-rat n d) | |
(cond | |
((and (> n 0) (> d 0)) (cons n d)) | |
((and (> n 0) (<= d 0)) (cons (- n) (- d))) | |
(else (cons (- n) (- d))))) | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;;; 2.1.2 | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
(define (make-rat n d) | |
(cons n d)) | |
(define (numer x) | |
(let ((g (gcd (car x) (cdr x)))) | |
(/ (car x) g))) | |
(define (denom x) | |
(let ((g (gcd (car x) (cdr x)))) | |
(/ (cdr x) g))) | |
(define hoge (make-rat 2 6)) | |
(numer hoge) | |
(denom hoge) | |
;; exercise 2.2 start | |
(define (make-segment start end) | |
(cons start end)) | |
(define (start-segment segment) | |
(car segment)) | |
(define (end-segment segment) | |
(cdr segment)) | |
(define (make-point x y) | |
(cons x y)) | |
(define (x-point point) | |
(car point)) | |
(define (y-point point) | |
(cdr point)) | |
(define (print-point p) | |
(newline) | |
(display "(") | |
(display (x-point p)) | |
(display ",") | |
(display (y-point p)) | |
(display ")") | |
(newline)) | |
(define (midpoint-segment segment) | |
(print-point (make-point (/ (+ (x-point (start-segment segment)) | |
(x-point (end-segment segment))) | |
2.0) | |
(/ (+ (y-point (start-segment segment)) | |
(y-point (end-segment segment))) | |
2.0)))) | |
(define point1 (make-point 10 20)) | |
(define point2 (make-point 30 40)) | |
(define segment1 (make-segment point1 point2)) | |
(midpoint-segment segment1) | |
;; exercise 2.2 end | |
;; exercise 2.3 start | |
;; point ver | |
(define (make-rectangle bottom-left top-right) | |
(cons bottom-left top-right)) | |
(define (bottom-left rectangle) | |
(car rectangle)) | |
(define (top-right rectangle) | |
(cdr rectangle)) | |
(define (x-distance rectangle) | |
(abs (- (x-point (top-right rectangle)) (x-point (bottom-left rectangle))))) | |
(define (y-distance rectangle) | |
(abs (- (y-point (top-right rectangle)) (y-point (bottom-left rectangle))))) | |
(define (perimeter rectangle) | |
(* 2.0 | |
(+ (x-distance rectangle) | |
(y-distance rectangle)))) | |
(define (area rectangle) | |
(* (x-distance rectangle) | |
(y-distance rectangle))) | |
(define rectangle1 (make-rectangle | |
(make-point 10 20) | |
(make-point 30 40))) | |
(perimeter rectangle1) | |
(area rectangle1) | |
;; segment ver | |
(define (make-rectangle first-point second-point) | |
(make-segment first-point second-point)) | |
(define (x-distance rectangle) | |
(abs (- (x-point (end-segment rectangle)) | |
(x-point (start-segment rectangle))))) | |
(define (y-distance rectangle) | |
(abs (- (y-point (end-segment rectangle)) | |
(y-point (start-segment rectangle))))) | |
(define rectangle1 (make-rectangle | |
(make-point 10 20) | |
(make-point 30 40))) | |
(perimeter rectangle1) | |
(area rectangle1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment