SICP問題3.56
R.Hammingが提起した2, 3, 5以外の素数の因子を持たない整数の数え上げ
- Sは1から始まる
- (scale-stream S 2)の要素はSの要素である
- (scale-stream S 3) と (scale-stream S 5)についても同様である
- これらは全てSの要素である
上記を満たすSの定義を穴埋めで答える問題。
merge手続き(教科書で定義)
(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)))))))))
scale-stream手続き(教科書で定義)
(define (scale-stream stream factor) (stream-map (lambda (x) (* x factor)) stream))
Sの定義
(define S (cons-stream 1 (merge (scale-stream S 2) (merge (scale-stream S 3) (scale-stream S 5)))))
テスト
(stream-ref S 0) ; 1 (stream-ref S 1) ; 2 (stream-ref S 2) ; 3 (stream-ref S 3) ; 4 (stream-ref S 4) ; 5 (stream-ref S 5) ; 6 (stream-ref S 6) ; 8 (stream-ref S 7) ; 9 (stream-ref S 8) ; 10 (stream-ref S 9) ; 12 (stream-ref S 10) ; 15 (stream-ref S 11) ; 16 (stream-ref S 12) ; 18
OK