Implement till 3.62
parent
8837835e01
commit
b8bb0df585
|
@ -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")
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
(load "util.scm")
|
||||
|
||||
(display "\nex-3.63\n")
|
||||
|
Loading…
Reference in New Issue