問題3.63 – SICP(計算機プログラムの構造と解釈)その154
問題3.63 リーダーマクロを使って sqrt-stream 手続きを調べる。 guesses を使わない場合は、繰り返し sqrt-stream が呼び出されてストリームが生成される。 ;; stream の最初の n 個の要素を印字する手続き (define (stream-head s n) (define (iter s n) (if (<= n 0) ‘done (begin (d…続きを読む
問題3.63 リーダーマクロを使って sqrt-stream 手続きを調べる。 guesses を使わない場合は、繰り返し sqrt-stream が呼び出されてストリームが生成される。 ;; stream の最初の n 個の要素を印字する手続き (define (stream-head s n) (define (iter s n) (if (<= n 0) ‘done (begin (d…続きを読む
問題3.59 a. (define (integrate-series s) (stream-map / s integers)) (stream-head (integrate-series ones) 5) gosh> 1.0 0.5 0.3333333333333333 0.25 0.2 done b. 問題の意味がわからないので写経する。 が、答えを見てもよく分からん・・・ (def…続きを読む
問題3.58 expand 手続きは割り算の手計算の手続きに似ている。 ;; stream の最初の n 個の要素を印字する手続き (define (stream-head s n) (define (iter s n) (if (<= n 0) ‘done (begin (display (stream-car s)) (display ", ") (iter (str…続きを読む
問題3.57 加算の回数を数えるために add-streams の中の + 演算を add 手続きに置き換える。 add 手続き中でカウンタを増加させて行き、結果の印字手続き (fib n) で add 手続きの合計回数(カウンタの最終結果)を Fibonacci 数とともに印字する。 (define counter 0) (define (count-up) (set! counter (+ c…続きを読む
問題3.56 ;; stream の最初の n 個の要素を印字する手続き (define (stream-head s n) (define (iter s n) (if (<= n 0) ‘done (begin (display (stream-car s)) (newline) (iter (stream-cdr s) (- n 1))))) (iter s n)) (define (…続きを読む
問題3.55 (define (partial-sums s) (cons-stream (stream-car s) (add-streams (stream-cdr s) (partial-sums s)))) (stream-ref (partial-sums integers) 0) gosh> 1 (stream-ref (partial-sums integers) 1) gos…続きを読む
問題3.54 (define (mul-streams s1 s2) (stream-map * s1 s2)) (define factorials (cons-stream 1 (mul-streams factorials (add-streams ones integers)))) (stream-ref factorials 0) ; n=1 gosh> 1 (stream-ref…続きを読む
問題3.53 (define (add-streams s1 s2) (stream-map + s1 s2)) (define s (cons-stream 1 (add-streams s s))) s を第一要素が 1 で、残りは s 同士の和であるストリームと定義してある。 s の第二要素は、s の第一要素同士の和であるから 2 となる。 s の第三要素は、s の第二要素同士の和であるから…続きを読む
問題3.52 メモライズした場合 (load "./stream.scm") (define sum 0) ;; sum の初期値 0 (define (accum x) (set! sum (+ x sum)) sum) ;; sum を x だけ増加させて sum を返す sum gosh> 0 (define seq (stream-map accum (strea…続きを読む
ストリームの実装の働き 通常のリストと異なり、ストリームでは cdr は選択されるまで評価されて欲しくないので、cons-stream は特殊形式でなければならない。 Gauche ではストリームの実装の違いから SICP の記述が上手く動作しないので、以下のサイトから stream.scm を手に入れてストリーム手続き群を SICP の意図通りに動作するようにしておく。 SICP memo: s…続きを読む