streamの表示用に
(define (stream-ref-list n s) (let loop ((count 0)) (if (= count n) 'done (begin (format #t "~a " (stream-ref s count)) (loop (+ count 1))))))
nとsは逆のほうがいい(じゃあそうしろよ)
;;exercise3.56 (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 ;s1car eq s2car (cons-stream s1car (merge (stream-cdr s1) (stream-cdr s2)))]))])) (define S (cons-stream 1 (merge (scale-stream S 3) (merge (scale-stream S 5) (scale-stream S 7))))) (stream-ref-list 10 S) ;;exercise3.58 ;;よくわからなかったので解答を確認した (define (expand num den radix) (cons-stream (quotient (* num radix) den) (expand (remainder (* num radix) den) den radix))) (define test1 (expand 1 7 10)) (stream-ref-list 12 test1) ;=> 1 4 2 8 5 7 1 4 2 8 5 7 done (/ 1.0 7) ;=> 0.14285714285714285 ;すげぇ (define test2 (expand 3 8 10)) (stream-ref-list 10 test2) ;=> 3 7 5 0 0 0 0 0 0 0 done (/ 3.0 8) ;=> 0.375
3.59からは数学.
べき級数とかやったんだけどな.やったことは確かに覚えている.
でもまったく覚えていない.なので動きがいまいちわかっていない.
ちなみに解析概論はAだったw
;;exercise3.59 ;;a (define (integrate-series stream) (let loop ((count 1) (stream stream)) (cons-stream (/ (stream-car stream) count) (loop (+ count 1) (stream-cdr stream))))) ;;解答確認1 (define (integrate-series stream) (let ((n 0)) (stream-map (lambda (x) (set! n (+ n 1)) (/ x n)) stream))) ;;解答確認2 (define (integrate-series stream) (stream-map / stream integers)) ;;b (define exp-series (cons-stream 1 (integrate-series exp-series))) (stream-ref-list 5 exp-series) (define cosine-series (cons-stream 1 (stream-map - (integrate-series sine-series)))) (define sine-series (cons-stream 0 (integrate-series cosine-series)))
解答を見る前にべき級数を見てもわからなかったけれど,解答を見てから見たら「なるほど」と思った.
;;exercise3.60 ;;解答確認 (define (mul-series s1 s2) (cons-stream (* (stream-car s1) (stream-car s2)) (add-streams (stream-map (lambda (x) (* (stream-car s1) x)) (stream-cdr s2)) (mul-series (stream-cdr s1) s2)))) (define square-sine-and-square-cosine (add-streams (mul-series sine-series sine-series) (mul-series cosine-series cosine-series))) (stream-ref-list 20 square-sine-and-square-cosine) ;=> 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 done
ちゃんと1になる.