From b8bb0df5850845ed9efc911ef891c4b916462fe6 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Sun, 3 Jan 2021 07:59:39 -0500 Subject: [PATCH] Implement till 3.62 --- ex-3_50-xx.scm => ex-3_50-62.scm | 75 ++++++++++++++++++++++++++++++++ ex-3_63-xx.scm | 4 ++ 2 files changed, 79 insertions(+) rename ex-3_50-xx.scm => ex-3_50-62.scm (70%) create mode 100644 ex-3_63-xx.scm diff --git a/ex-3_50-xx.scm b/ex-3_50-62.scm similarity index 70% rename from ex-3_50-xx.scm rename to ex-3_50-62.scm index 042f5da..0bbf4ae 100644 --- a/ex-3_50-xx.scm +++ b/ex-3_50-62.scm @@ -187,4 +187,79 @@ '(1 2 3 4 5 6 8 9 10 12)) (display "\nex-3.57\n") +(display "[answered]\n") + +; With memoizing only one addition is required per number. So the complexity is +; O(n). With memoizing the previous numbers have to be calculated recursively +; which leads to exponential growth. + +(display "\nex-3.58 - expand\n") + +(define (expand num den radix) + (cons-stream + (quotient (* num radix) den) + (expand (remainder (* num radix) den) den radix))) + +(assert (take 5 (expand 1 7 10)) + '(1 4 2 8 5)) + +(assert (take 5 (expand 3 8 10)) + '(3 7 5 0 0)) + +; The procedure expands a fraction (num/dem) into the rational value to base +; radix. + +(display "\nex-3.59 - sine/cosine series\n") + +(define (integrate-series xs) + (define (iter n xs) + (cons-stream (* (/ 1 n) (stream-car xs)) + (iter (+ n 1) (stream-cdr xs)))) + (iter 1 xs)) + +(define (integrate-series xs) + (stream-map * (stream-map / ones integers) xs)) + +(assert (take 5 (integrate-series integers)) + '(1 1 1 1 1)) + +(define exp-series + (cons-stream 1 (integrate-series exp-series))) + +(define (sum xs) + (if (null? xs) + 0 + (+ (car xs) (sum (cdr xs))))) + +(assert (sum (take 5 exp-series)) + (/ 65 24)) + +(define cosine-series + (cons-stream 1 (stream-map - (integrate-series sine-series)))) + +(define sine-series + (cons-stream 0 (integrate-series cosine-series))) + +(assert (sum (take 10 sine-series)) + (/ 305353 362880)) + +(display "\nex-3.60 - mul-series\n") + +(define add-series add-streams) + +(define (mul-series s1 s2) + (cons-stream (* (stream-car s1) (stream-car s2)) + (add-streams (scale-stream (stream-cdr s2) (stream-car s1)) + (mul-series (stream-cdr s1) s2))))) + +(assert (sum (take 10 (add-series (mul-series cosine-series cosine-series) + (mul-series sine-series sine-series)))) + 1) + +(display "\nex-3.61 - invert-unit-series\n") + +(define (invert-unit-series s) 0) + + +(display "\nex-3.62\n") diff --git a/ex-3_63-xx.scm b/ex-3_63-xx.scm new file mode 100644 index 0000000..a5aa85c --- /dev/null +++ b/ex-3_63-xx.scm @@ -0,0 +1,4 @@ +(load "util.scm") + +(display "\nex-3.63\n") +