exercise 3.53~57

ex3.53

2^nですね、わかります。

ex3.54
(define (mul-stream s1 s2)                                                 
  (stream-map * s1 s2))

(define factorials (cons-stream 1 (mul-stream factorials (stream-cdr integers))))
ex3.55
;; なんとなく二つ書いてみた。
;; (define (partial-sums stream)                            
;;   (cons-stream (stream-car stream)                       
;;                (add-stream (stream-cdr stream)           
;;                            (partial-sums stream))))      
                                                            
(define (partial-sums stream)                               
  (add-stream stream                                        
              (cons-stream 0 (partial-sums stream))))
ex3.56
(define S (cons-stream 1 (merge (scale-stream S 2) (merge (scale-stream S 3) (scale-stream S 5)))))
ex3.57
(define count 0)
(define (add-streams-mod s1 s2) 
  (stream-map 
   (lambda (x y)
     (set! count (+ count 1)) 
     (+ x y))    
   s1 s2)) 
                                                            
(define fibs         
  (cons-stream 0 (cons-stream 1 (add-streams-mod (stream-cdr fibs) fibs))))

とかやって調べてみた。
メモ化ありだとfibs(n)を計算するのに、足し算はn-1回。
まぁメモ化してるから、普通にそうなるよね。

無しの場合は
(0 0 1 3 7 14 26 ...)
みたいになった。
ちなみに第二階差数列がFibonacci数列な模様。理由はさっぱり。
まぁ問題にも「何故そうなるかを求めろ」、って記述もなかったし諦めるか。orz