diff options
Diffstat (limited to 'SICP')
| -rw-r--r-- | SICP/ex1-1.scm | 16 | ||||
| -rw-r--r-- | SICP/ex2-2.scm | 97 | ||||
| -rw-r--r-- | SICP/ex2-4.scm | 57 |
3 files changed, 170 insertions, 0 deletions
diff --git a/SICP/ex1-1.scm b/SICP/ex1-1.scm new file mode 100644 index 0000000..7f0b307 --- /dev/null +++ b/SICP/ex1-1.scm @@ -0,0 +1,16 @@ +(define (factorial n) + (if (= n 1) + n + (* n (factorial (- n 1))) + ) + ) + +(factorial 11000) + +(define (fib n) + (cond ((= n 0) 0) + ((= n 1) 1) + (else (+ (fib (- n 1)) + (fib (- n 2)))))) + +(fib 6) 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) diff --git a/SICP/ex2-4.scm b/SICP/ex2-4.scm new file mode 100644 index 0000000..bfc3b64 --- /dev/null +++ b/SICP/ex2-4.scm @@ -0,0 +1,57 @@ +(define (cons x y) + (define (dispatch m) + (cond ((= m 0) x) + ((= m 1) y) + (else + (error "Argument not 0 or 1: + CONS" m)))) + dispatch) + +(define (car z) (z 0)) +(define (cdr z) (z 1)) + +(define pair (cons 111 2)) + +(car pair) + +;Exercise 2.4 +(define (cons x y) + (lambda (m) (m x y))) + +(define (car z) + (z (lambda (p q) p))) +(define (cdr z) + (z (lambda (p q) q))) + +(cdr (cons 1 2)) + +;Exercise 2.5 +(define (cons x y) (* (pow 2 x) (pow 3 y))) + +(define (pow x y) + (if (= y 0) + 1 + (* x (pow x (- y 1))))) + + +(define (car z) + (if (not (= (modulo z 2) 0)) + 0 + (+ (car (/ z 2)) 1))) +(define (cdr z) + (if (not (= (modulo z 3) 0)) + 0 + (+ (cdr (/ z 3)) 1))) + +(car (cons 10 2)) +(cdr (cons 1 119)) + +;Exercise 2.6 + +(define zero (lambda (f) (lambda (x) x))) +(define (add-1 n) + (lambda (f) (lambda (x) (f ((n f) x))))) + +(define one (lambda(f) (lambda (x) (f x)))) + +(= one (add-1 zero)) |
