Implement till 3.56
parent
b76c5b0c70
commit
8837835e01
|
@ -106,3 +106,85 @@
|
|||
|
||||
(display "\nex-3.53\n")
|
||||
|
||||
(define (add-streams s1 s2)
|
||||
(stream-map + s1 s2))
|
||||
|
||||
(define ones (cons-stream 1 ones))
|
||||
|
||||
(define integers (cons-stream 1 (add-streams ones integers)))
|
||||
|
||||
(define (take n xs)
|
||||
(if (= n 0)
|
||||
'()
|
||||
(cons (stream-car xs)
|
||||
(take (- n 1) (stream-cdr xs)))))
|
||||
|
||||
(assert (take 3 integers)
|
||||
'(1 2 3))
|
||||
|
||||
(define fibs
|
||||
(cons-stream 0
|
||||
(cons-stream 1
|
||||
(add-streams (stream-cdr fibs)
|
||||
fibs))))
|
||||
|
||||
(assert (take 7 fibs)
|
||||
'(0 1 1 2 3 5 8))
|
||||
|
||||
(define (scale-stream stream factor)
|
||||
(stream-map (lambda (x) (* x factor)) stream))
|
||||
|
||||
(define double (cons-stream 1 (scale-stream double 2)))
|
||||
|
||||
(assert (take 3 double)
|
||||
'(1 2 4))
|
||||
|
||||
(define s (cons-stream 1 (add-streams s s)))
|
||||
(assert (take 5 s)
|
||||
'(1 2 4 8 16))
|
||||
|
||||
(display "\nex-3.54 - factorials\n")
|
||||
|
||||
(define (mul-streams s1 s2)
|
||||
(stream-map * s1 s2))
|
||||
|
||||
(define factorials (cons-stream 1 (mul-streams (stream-cdr integers) factorials)))
|
||||
|
||||
(assert (take 5 factorials)
|
||||
'(1 2 6 24 120))
|
||||
|
||||
(display "\nex-3.55 - partial-sums\n")
|
||||
|
||||
(define (partial-sums xs)
|
||||
(cons-stream (stream-car xs)
|
||||
(add-streams (partial-sums xs)
|
||||
(stream-cdr xs))))
|
||||
|
||||
(assert (take 5 (partial-sums integers))
|
||||
'(1 3 6 10 15))
|
||||
|
||||
(display "\nex-3.56 - enumerate multiplies of 2, 3, 5\n")
|
||||
|
||||
(define (merge s1 s2)
|
||||
(cond ((stream-null? s1) s2)
|
||||
((stream-null? s2) s1)
|
||||
(else
|
||||
(let ((s1car (stream-car s1))
|
||||
(s2car (stream-car s2)))
|
||||
(cond ((< s1car s2car)
|
||||
(cons-stream s1car (merge (stream-cdr s1) s2)))
|
||||
((> s1car s2car)
|
||||
(cons-stream s2car (merge s1 (stream-cdr s2))))
|
||||
(else
|
||||
(cons-stream s1car
|
||||
(merge (stream-cdr s1)
|
||||
(stream-cdr s2)))))))))
|
||||
|
||||
(define S (cons-stream 1 (merge (merge (scale-stream S 2) (scale-stream S 3))
|
||||
(scale-stream S 5))))
|
||||
|
||||
(assert (take 10 S)
|
||||
'(1 2 3 4 5 6 8 9 10 12))
|
||||
|
||||
(display "\nex-3.57\n")
|
||||
|
||||
|
|
Loading…
Reference in New Issue