Skip to content

Commit 908703a

Browse files
committed
Initial commit
0 parents  commit 908703a

21 files changed

+11656
-0
lines changed

ch1.scm

+803
Large diffs are not rendered by default.

ch2.scm

+1,795
Large diffs are not rendered by default.

ch2support.scm

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
;;; CODE FROM OTHER CHAPTERS OF STRUCTURE AND INTERPRETATION OF
2+
;;; COMPUTER PROGRAMS NEEDED BY CHAPTER 2
3+
4+
;;;from chapter 1
5+
(define (square x) (* x x))
6+
7+
;;;from section 1.2.5, for Section 2.1.1
8+
(define (gcd a b)
9+
(if (= b 0)
10+
a
11+
(gcd b (remainder a b))))
12+
13+
;;;from section 1.2.2, for Section 2.2.3
14+
(define (fib n)
15+
(cond ((= n 0) 0)
16+
((= n 1) 1)
17+
(else (+ (fib (- n 1))
18+
(fib (- n 2))))))
19+
20+
;;; ***not in book, but needed for code before quote is introduced***
21+
(define nil '())
22+
23+
;;;-----------
24+
;;;from section 3.3.3 for section 2.4.3
25+
;;; to support operation/type table for data-directed dispatch
26+
27+
(define (assoc key records)
28+
(cond ((null? records) false)
29+
((equal? key (caar records)) (car records))
30+
(else (assoc key (cdr records)))))
31+
32+
(define (make-table)
33+
(let ((local-table (list '*table*)))
34+
(define (lookup key-1 key-2)
35+
(let ((subtable (assoc key-1 (cdr local-table))))
36+
(if subtable
37+
(let ((record (assoc key-2 (cdr subtable))))
38+
(if record
39+
(cdr record)
40+
false))
41+
false)))
42+
(define (insert! key-1 key-2 value)
43+
(let ((subtable (assoc key-1 (cdr local-table))))
44+
(if subtable
45+
(let ((record (assoc key-2 (cdr subtable))))
46+
(if record
47+
(set-cdr! record value)
48+
(set-cdr! subtable
49+
(cons (cons key-2 value)
50+
(cdr subtable)))))
51+
(set-cdr! local-table
52+
(cons (list key-1
53+
(cons key-2 value))
54+
(cdr local-table)))))
55+
'ok)
56+
(define (dispatch m)
57+
(cond ((eq? m 'lookup-proc) lookup)
58+
((eq? m 'insert-proc!) insert!)
59+
(else (error "Unknown operation -- TABLE" m))))
60+
dispatch))
61+
62+
(define operation-table (make-table))
63+
(define get (operation-table 'lookup-proc))
64+
(define put (operation-table 'insert-proc!))
65+
66+
;;;-----------

ch2tests.scm

+167
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
;;; EXAMPLES OF TESTING CODE (IN MIT SCHEME)
2+
;;; FROM CHAPTER 2 OF STRUCTURE AND INTERPRETATION OF COMPUTER PROGRAMS
3+
4+
5+
;;;SECTION 2.4.1
6+
7+
;; Ben's rectangular
8+
9+
(define z1 (make-from-real-imag 1 1))
10+
;Value: z1
11+
12+
(real-part z1)
13+
;Value: 1
14+
(imag-part z1)
15+
;Value: 1
16+
(magnitude z1)
17+
;Value: 1.4142135623730951
18+
(angle z1)
19+
;Value: .7853981633974483
20+
(* 4 (angle z1))
21+
;Value: 3.141592653589793
22+
(define z2 (make-from-mag-ang 1.4142135623730951 .7853981633974483))
23+
;Value: z2
24+
25+
(real-part z2)
26+
;Value: 1.
27+
(imag-part z2)
28+
;Value: 1.
29+
30+
z1
31+
;Value 10: (1 . 1)
32+
33+
z2
34+
;Value 14: (1. . 1.)
35+
36+
(add-complex z1 z2)
37+
;Value 16: (2. . 2.)
38+
39+
(sub-complex z1 z2)
40+
;Value 17: (0. . 0.)
41+
42+
43+
;; Alyssa's polar
44+
45+
(define z1 (make-from-real-imag 1 1))
46+
;Value: z1
47+
48+
(real-part z1)
49+
;Value: 1.
50+
51+
(imag-part z1)
52+
;Value: 1.
53+
54+
(magnitude z1)
55+
;Value: 1.4142135623730951
56+
57+
(angle z1)
58+
;Value: .7853981633974483
59+
60+
(* 4 (angle z1))
61+
;Value: 3.141592653589793
62+
63+
(define z2 (make-from-mag-ang 1.4142135623730951 .7853981633974483))
64+
;Value: z2
65+
66+
(real-part z2)
67+
;Value: 1.
68+
69+
(imag-part z2)
70+
;Value: 1.
71+
72+
z1
73+
;Value 12: (1.4142135623730951 . .7853981633974483)
74+
75+
z2
76+
;Value 13: (1.4142135623730951 . .7853981633974483)
77+
78+
(mul-complex z1 z2)
79+
;Value 18: (2.0000000000000004 . 1.5707963267948966)
80+
81+
(div-complex z1 z2)
82+
;Value 19: (1. . 0.)
83+
84+
;;;SECTION 2.4.2
85+
86+
(define z1 (make-from-real-imag 1 1))
87+
;Value: z1
88+
89+
z1
90+
;Value 20: (rectangular 1 . 1)
91+
(real-part z1)
92+
;Value: 1
93+
(imag-part z1)
94+
;Value: 1
95+
(magnitude z1)
96+
;Value: 1.4142135623730951
97+
(angle z1)
98+
;Value: .7853981633974483
99+
100+
(define z2 (make-from-mag-ang 1.4142135623730951 .7853981633974483))
101+
;Value: z2
102+
103+
z2
104+
;Value 22: (polar 1.4142135623730951 . .7853981633974483)
105+
106+
(magnitude z2)
107+
;Value: 1.4142135623730951
108+
(angle z2)
109+
;Value: .7853981633974483
110+
(real-part z2)
111+
;Value: 1.
112+
(imag-part z2)
113+
;Value: 1.
114+
115+
z1
116+
;Value 20: (rectangular 1 . 1)
117+
z2
118+
;Value 22: (polar 1.4142135623730951 . .7853981633974483)
119+
120+
(add-complex z1 z2)
121+
;Value 23: (rectangular 2. . 2.)
122+
(sub-complex z1 z2)
123+
;Value 24: (rectangular 0. . 0.)
124+
(mul-complex z1 z2)
125+
;Value 25: (polar 2.0000000000000004 . 1.5707963267948966)
126+
(div-complex z1 z2)
127+
;Value 26: (polar 1. . 0.)
128+
129+
;;;SECTION 2.5.2
130+
131+
(define z1 (make-complex-from-real-imag 1 1))
132+
133+
;; Before coercion mechanism
134+
135+
(add z1 (make-scheme-number 3))
136+
;Value 1: (complex rectangular 4 . 1)
137+
138+
(add (make-scheme-number 3) z1)
139+
;No method for the given types (add (scheme-number complex))
140+
141+
142+
;; With coercion mechanism
143+
144+
(add z1 (make-scheme-number 3))
145+
;Value 6: (complex rectangular 4 . 1)
146+
147+
(add (make-scheme-number 3) z1)
148+
;Value 7: (complex rectangular 4 . 1)
149+
150+
;;;SECTION 2.5.3
151+
152+
(define a (make-polynomial 'x '((5 1) (4 2) (2 3) (1 -2) (0 -5))))
153+
154+
a
155+
;Value 3: (polynomial x (5 1) (4 2) (2 3) (1 -2) (0 -5))
156+
157+
(add a a)
158+
;Value 4: (polynomial x (5 2) (4 4) (2 6) (1 -4) (0 -10))
159+
160+
(define b (make-polynomial 'x '((100 1) (2 2) (0 1))))
161+
162+
b
163+
;Value 5: (polynomial x (100 1) (2 2) (0 1))
164+
165+
(mul b b)
166+
;Value 6: (polynomial x (200 1) (102 4) (100 2) (4 4) (2 4) (0 1))
167+

0 commit comments

Comments
 (0)