(wat-aro)

生きてます

2015-12-01から1ヶ月間の記事一覧

SICP 問題 3.79

(define (solve-2nd f dt h0 dy0) (define y (integral (delay dy) y0 dt)) (define dy (integral (delay ddy) dy0 dt)) (define ddy (stream-map f y dy)) y) 計算機プログラムの構造と解釈 第2版作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・…

SICP 問題 3.78

問題文のまま (define (solve-2nd a b dt y0 dy0) (define y (integral (delay dy) y0 dt)) (define dy (integral (delay ddy) dy0 dt)) (define ddy (add-streams (scale-stream dy a) (scale-stream y b))) y)

SICP 問題 3.77

ループのあるシステムで使えるようにintegrandをdelayed-integrandにする. integralを呼び出す時の第一引数にはdelayをつける (define (integral integrand initial-value dt) (cons-stream initial-value (if (stream-null? integrand) the-empty-stream (…

SICP 問題 3.76

前回のデータと比べて平均化する. (define (smooth stream) (cons-stream (average (car stream) 0) (stream-map average (stream-cdr stream) stream))) (define (make-zero-crossings sense-data) (let ((smooth-data (smooth sense-data))) (stream-map …

SICP 問題 3.75

バグを探す問題 (define (make-zero-crossings input-stream last-value) (let ((avpt (/ (+ (stream-car input-stream) last-value) 2))) (cons-stream (sign-change-detector avpt last-value) (make-zero-crossings (stream-cdr input-stream) avpt)))) ;…

SICP 問題 3.74

last-valueを取る代わりにmapのargstreamsの二つ目に一回分遅らせたsense-dataをとればいい. そうすれば今の値と前回の値を比べて零交差だったかをsign-change-detectorで判定できる. (define (make-zero-crossings input-stream last-value) (cons-stream…

SICP 問題 3.73

問題文と図の通りに. (define (integral integrand initial-value dt) (define int (cons-stream initial-value (add-streams (scale-stream integrand dt) int))) int) (define (RC R C dt) (lambda (i v0) (add-streams (scale-stream i R) (integral (sc…

SICP 問題 3.72

sum-squareのところで間違えて立方数をたしていたせいで, gosh> (stream-ref triple-way-sum-square-number 0) 87539319 って出てきて驚きました. (define (sum-square x) (let ((a (car x)) (b (cadr x))) (+ (* a a) (* b b)))) (define (triple-way-sum…

SICP 問題 3.71

問題文通りに. ラマヌジャン数のストリームを作る. (define (sum-cube x) (let ((a (car x)) (b (cadr x))) (+ (* a a a) (* b b b)))) (define (ramanujan stream) (let ((s1 (stream-car stream)) (s2 (stream-car (stream-cdr stream)))) (let ((weight…

SICP 問題 3.70

;; mergeを参考にして重みをつけてmerge-weightedを定義する (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 (merg…

EmacsのインストールとCommandとOptionの設定

これの通りにインストール Installing Emacs on OS X - WikEmacs Homebrew で IME インラインパッチを当てた Emacs 24.5.1 を入れる | nDiki emacsをaliasするときに-nwをつけて端末で動くようにする. iterm2でemacsを使うときはここの設定に合わせる. qii…

SICP 問題 3.68

元のpairsと違ってcons-streamを使っていないためdelayされないので無限ループになる. (define (pairs s t) (interleave (stream-map (lambda (x) (list (stream-car s) x)) t) (pairs (stream-cdr s) (stream-cdr t))))

SICP 問題 3.67

二通りやってみました. ;; interleave (define (pairs s t) (cons-stream (list (stream-car s) (stream-car t)) (interleave (interleave (stream-map (lambda (x) (list (stream-car s) x)) (stream-cdr t)) (stream-map (lambda (x) (list x (stream-car…

SICP 問題 3.65

(define (ln2-summands n) (cons-stream (/ 1.0 n) (stream-map - (ln2-summands (+ n 1))))) (define ln2-stream (partial-sums (ln2-summands 1))) gosh> (stream-head ln2-stream 20) 1.0 0.5 0.8333333333333333 0.5833333333333333 0.7833333333333332 …

SICP 問題 3.64

(define (sqrt-improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2)) (define (stream-limit s tolerance) (let ((s1 (stream-car s)) (s2 (stream-car (stream-cdr s)))) (if (> tolerance (abs (- s1 s2))) s2 (stream-li…

SICP 問題 3.63

(define (sqrt-stream x) (define guesses (cons-stream 1.0 (stream-map (lambda (guess) (sqrt-improve guess x)) guesses))) guesses) (define (sqrt-stream x) (cons-stream 1.0 (stream-map (lambda (guess) (sqrt-improve guess x)) (sqrt-stream x)))…

SICP 問題 3.62

二つのべき級数を割る手続きdiv-stream (define (div-stream s1 s2) (if (= s2 0) (error "ZERO-DIVISOR" s2) (mul-streams s1 (invert-unit-series s2))))

SICP 問題 3.61

べき級数Sの逆数を求める手続きinvert-unit-seriesを定義する. 問題文の通りですね. (define (invert-unit-series stream) (cons-stream 1 (mul-series (scale-stream (stream-cdr s1) -1) (invert-unit-series stream))))

SICP 問題 3.60

(define (stream-head s n) (let iter ((s s) (n n)) (if (zero? n) 'done (begin (display (stream-car s)) (display " ") (iter (stream-cdr s) (- n 1)))))) (define (mul-series s1 s2) (cons-stream (* (stream-car s1) (stream-car s2)) (add-streams …

SICP 問題 3.59

;; a ;; 引数としてべき級数を表現するストリームをとり,級数の積分の定数項を除いた項の係数のストリーム (define (integrate-series stream) (stream-map / stream integers)) ;; b (define exp-series (cons-stream 1 (integrate-series exp-series))) ;…

SICP 問題 3.58

(define (expand num den radix) (cons-stream (quotient (* num radix) den) (expand (remainder (* num radix) den) den radix))) #| (/ num den)を表す少数を生成する. (expand 1 7 10)は 1 4 2 8 5 7 (expand 3 8 10)は 3 7 5 0 つまり0.375で割り切れ…

SICP 問題 3.57

メモ化しているので(add-streams (stream-cdr fibs) fibs)の部分で加算が一回行われるだけで済んでいる. これがメモ化していない場合はfibsの値も(stream-cdr fibs)の値も0番目と1番目の値から加算して求めなくてはならない. (define fibs (cons-stream 0 …

SICP 問題 3.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 s2c…

SICP 問題 3.55

s0, s0 + s1, s0 + s1 + s2, ... という要素なのでstreamの次の要素とsum-integersの今の要素を足したものがsum-integersの次の要素となる. (define (partial-sums stream) (cons-stream (stream-car stream) (add-streams (stream-cdr stream) sum-integer…

SICP 問題 3.54

mul-streamsを定義して,0から始まるn番目の階乗,factorialsを定義する. (define (mul-streams s1 s2) (stream-map * s1 s2)) (define factorials (cons-stream 1 (mul-streams factorials (integers-starting-from 1))))

SICP 問題 3.53

(define (add-streams s1 s2) (stream-map + s1 s2)) (define s (cons-stream 1 (add-streams s s))) sは2のn乗のストリームを作る.

SICP 3.5章のstreamについて

整理しなおす. 環境はGauche 0.9.4. streamを本文通りに実装するとうまくいかない. 遅延リストになっていない. stream-mapの挙動からそれがわかる. (define (stream-map proc . argstreams) (if (stream-null? (car argstreams)) the-empty-stream (cons…

SICP 問題 3.52

sum:210 メモ化しているためにseqを何回呼び出してもsumに何度も加算されることがない. メモ化していない場合はseqを参照するたびにsumに加算されていく.

SICP 問題 3.51

(define (show x) (display-line x) x) (define x (stream-map show (stream-enumerate-interval 0 10))) 0x (stream-ref x 5) 1 2 3 4 55 (stream-ref x 7) 6 77 memo-procのおかげで(stream-ref x 7)では(stream-ref x 5)の計算は行っていない. そのため6…

SICP 問題 3.50

マクロを使ってる部分は ストリームの実装と問題3.50-3.51 - nrvctの日記 ここから引用. ;; 次の二つは引用元から ;; cons-streamは評価順序を変えたいのでマクロ (define-syntax cons-stream (syntax-rules () ((_ a b) (cons a (delay b))))) ;; delayも…