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