aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SICP/ex1-1.scm16
-rw-r--r--SICP/ex2-2.scm97
-rw-r--r--SICP/ex2-4.scm57
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))