Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
fastred committed Nov 2, 2011
0 parents commit 785e669
Show file tree
Hide file tree
Showing 43 changed files with 801 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
_instructions.txt
9 changes: 9 additions & 0 deletions 1_11.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(define (fn-rec n)
(cond ((< n 3) n)
(else (+ (fn-rec (- n 1))
(* 2 (fn-rec (- n 2)))
(* 3 (fn-rec (- n 3)))))))

(fn-rec 3)

; TODO: iterative
20 changes: 20 additions & 0 deletions 1_21.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
(define (square n)
(* n n))

(define (divides? a b)
(= (remainder b a) 0))

(define (find-divisor n test-divisor)
(cond ((> (square test-divisor) n) n)
((divides? test-divisor n) test-divisor)
(else (find-divisor n (+ test-divisor 1)))))

(define (smallest-divisor n)
(find-divisor n 2))

(define (prime? n)
(= n (smallest-divisor n)))

(smallest-divisor 199)
(smallest-divisor 1999)
(smallest-divisor 19999)
38 changes: 38 additions & 0 deletions 1_22.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
; Chicken Scheme has been used.

(define (square n)
(* n n))

(define (divides? a b)
(= (remainder b a) 0))

(define (find-divisor n test-divisor)
(cond ((> (square test-divisor) n) n)
((divides? test-divisor n) test-divisor)
(else (find-divisor n (+ test-divisor 1)))))

(define (smallest-divisor n)
(find-divisor n 2))

(define (prime? n)
(= n (smallest-divisor n)))

(define (report-prime elapsed-time)
(display " *** ")
(display elapsed-time))

(define (start-prime-test n start-time)
(if (prime? n)
(report-prime (- (current-milliseconds) start-time))))

(define (timed-prime-test n)
(newline)
(display n)
(newline)
(start-prime-test n (current-milliseconds)))

(define (search-for-primes n)
(cond ((prime? n) n)
(else (search-for-primes (+ n 2)))))

(time (search-for-primes 10000000001 ))
37 changes: 37 additions & 0 deletions 1_23.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
; Chicken Scheme has been used.

(define (square n)
(* n n))

(define (next n)
(if (= n 2) 3
(+ n 2)))

(define (divides? a b)
(= (remainder b a) 0))

(define (find-divisor n test-divisor)
(cond ((> (square test-divisor) n) n)
((divides? test-divisor n) test-divisor)
(else (find-divisor n (next test-divisor)))))

(define (smallest-divisor n)
(find-divisor n 2))

(define (prime? n)
(= n (smallest-divisor n)))

(define (report-prime elapsed-time)
(display " *** ")
(display elapsed-time))

(define (start-prime-test n start-time)
(if (prime? n)
(report-prime (- (current-milliseconds) start-time))))

(define (search-for-primes n)
(cond ((prime? n) n)
(else (search-for-primes (+ n 2)))))

(time (search-for-primes 10000000001 ))
(time (search-for-primes 100000000001 ))
29 changes: 29 additions & 0 deletions 1_24.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
; Chicken Scheme has been used.

(define (square n)
(* n n))

(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))

(define (fermat-test n)
(define (try-it a)
(= (expmod a n n) a))
(try-it (+ 1 (random (- n 1)))))

(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n) (fast-prime? n (- times 1)))
(else #f)))

(define (search-for-primes n)
(cond ((fast-prime? n 1000) n)
(else (search-for-primes (+ n 2)))))

(time (search-for-primes 1000000001 ))
32 changes: 32 additions & 0 deletions 1_27.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
(define (square n)
(* n n))

(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))

(define (fermat-test n)
(define (try-it a)
(= (expmod a n n) a))
(try-it (+ 1 (random (- n 1)))))

(define (fast-prime? n times)
(cond ((= times 0) #t)
((fermat-test n) (fast-prime? n (- times 1)))
(else #f)))

(define (search-for-primes n)
(cond ((fast-prime? n 100) n)
(else (search-for-primes (+ n 2)))))

(fast-prime? 561 100)
(fast-prime? 1105 100)
(fast-prime? 1729 100)
(fast-prime? 2465 100)
(fast-prime? 2821 100)
(fast-prime? 6601 100)
32 changes: 32 additions & 0 deletions 1_29.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
(define (cube x) (* x x x))

(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))

(define (simpson-coef i n)
(cond ((= i 0) 1)
((= i n) 1)
((= (modulo i 2) 0) 2)
((= (modulo i 2) 1) 4)
))

(define (integral f a b dx)
(define (add-dx x) (+ x dx))
(* (sum f (+ a (/ dx 2.0)) add-dx b)
dx))

(define (integral-simpson f a b n)
(define h (/ (- b a) n))
(define (step x) (+ x 1))
(define (func k)
(define (y_k k)
(f (+ a (* k h))))
(cond ((or (= k 0) (= k n)) (y_k k))
((even? k) (* 2 (y_k k)))
(else (* 4 (y_k k)))))
(* (/ h 3) (sum func a step n)))

(integral-simpson cube 0 1 101)
33 changes: 33 additions & 0 deletions 1_30.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
(define (cube x) (* x x x))

(define (sum term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (+ result (term a)))))
(iter a 0))

(define (simpson-coef i n)
(cond ((= i 0) 1)
((= i n) 1)
((= (modulo i 2) 0) 2)
((= (modulo i 2) 1) 4)
))

(define (integral f a b dx)
(define (add-dx x) (+ x dx))
(* (sum f (+ a (/ dx 2.0)) add-dx b)
dx))

(define (integral-simpson f a b n)
(define h (/ (- b a) n))
(define (step x) (+ x 1))
(define (func k)
(define (y_k k)
(f (+ a (* k h))))
(cond ((or (= k 0) (= k n)) (y_k k))
((even? k) (* 2 (y_k k)))
(else (* 4 (y_k k)))))
(* (/ h 3) (sum func a step n)))

(integral-simpson cube 0 1 101)
27 changes: 27 additions & 0 deletions 1_31.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(define (product term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (* result (term a)))))
(iter a 1))

(define (factorial n)
(define (inc x) (+ x 1))
(define (func x) x)
(product func 1 inc n))

(define (ceiled-even n)
(if (even? n) n
(+ n 1)))

(define (ceiled-odd n)
(if (even? n) (- n 1)
n))

(define (calculate-pi n)
(define (inc x) (+ x 1))
(define numerator (product ceiled-even 2 inc (+ 2 n)))
(define denominator (product ceiled-odd 3 inc (+ 3 n)))
(* 4 (/ numerator denominator)))

(calculate-pi 160)
48 changes: 48 additions & 0 deletions 1_32.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
(define (accumulate combiner null-value term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a) (combiner result (term a)))))
(iter a null-value))

(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))

(define (accumulate-rec combiner null-value term a next b)
(if (> a b)
null-value
(combiner (term a) (accumulate-rec combiner null-value term (next a) next b))))

(define (product term a next b)
(define (func x y) (* x y))
;(display (func 2 3))
(accumulate func 1 term a next b))

(define (sum term a next b)
(define (func x y) (+ x y))
(accumulate func 0 term a next b))


(define (factorial n)
(define (inc x) (+ x 1))
(define (func x) x)
(product func 1 inc n))

(define (ceiled-even n)
(if (even? n) n
(+ n 1)))

(define (ceiled-odd n)
(if (even? n) (- n 1)
n))

(define (calculate-pi n)
(define (inc x) (+ x 1))
(define numerator (product ceiled-even 2 inc (+ 2 n)))
(define denominator (product ceiled-odd 3 inc (+ 3 n)))
(* 4 (/ numerator denominator)))

(calculate-pi 1)
19 changes: 19 additions & 0 deletions 1_35.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
(define (average x1 x2) (/ (+ x1 x2) 2))

(define tolerance 0.00001)

(define (fixed-point f first-guess)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))

(define (sqrt x)
(fixed-point (lambda (y) (y (/ x y)))
1.0))

(fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)
13 changes: 13 additions & 0 deletions 1_36.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
(define tolerance 0.00001)

(define (fixed-point f first-guess)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))

(fixed-point (lambda (x) (/ (log 1000) (log x))) 2)
12 changes: 12 additions & 0 deletions 1_37.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
(define (cont-frac n d k)
(define (cont-frac-iter i result)
(let ((n_k (n i))
(d_k (d i)))
(cond ((= i 0) result)
((= i k) (/ n_k d_k))
(else (cont-frac-iter (- i 1) result)))))
(cont-frac-iter k 0))

(/ 1 (cont-frac (lambda (i) 1.0)
(lambda (i) 1.0)
7))
12 changes: 12 additions & 0 deletions 1_39.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
(define (tan-cf x k)
(define (numerator x i)
(if (= i 0) x
(* x x)))
(define (denominator i)
(- (* (+ i 1) 2) 1))
(define (sub x k i)
(cond ((= i k) (/ (numerator x i) (denominator i)))
(else (/ (numerator x i) (- (denominator i) (sub x k (+ i 1)))))))
(sub x k 0))

(tan-cf 0.5 100)
Loading

0 comments on commit 785e669

Please sign in to comment.