問題3.72 – SICP(計算機プログラムの構造と解釈)その162
問題3.72 weighted-pairs 等の必要な手続きは問題3.70のものを使う。 (define (add-square-pairs-weight pair) (let ((i (car pair)) (j (cadr pair))) (+ (square i) (square j)))) (define st (weighted-pairs integers integers add-s…続きを読む
問題3.72 weighted-pairs 等の必要な手続きは問題3.70のものを使う。 (define (add-square-pairs-weight pair) (let ((i (car pair)) (j (cadr pair))) (+ (square i) (square j)))) (define st (weighted-pairs integers integers add-s…続きを読む
問題3.71 weighted-pairs 等の必要な手続きは問題3.70のものを使う。 ;;;; Ramanujan 数を求める (define (add-cube-pairs-weight pair) (let ((i (car pair)) (j (cadr pair))) (+ (cube i) (cube j)))) (define st (weighted-pairs integers…続きを読む
問題3.70 (define (merge-weighted pairs1 pairs2 weight) (cond ((stream-null? (stream-car pairs1)) pairs2) ((stream-null? (stream-car pairs2)) pairs1) (else (let ((p1car (stream-car pairs1)) (p2car (strea…続きを読む
問題3.69 pairs を参考にして考える。 (define (triples s t u) (cons-stream (list (stream-car s) (stream-car t) (stream-car u)) (interleave (stream-map (lambda (x) (cons (stream-car s) x)) (pairs (stream-cdr t) (str…続きを読む
キーワード補完 Vim プラグインの neocomplcache にスニペット補完機能が追加されていた。 バッククオートを使った eval が使えるようなので、html で <ins>, <del> タグに記述する datetime 属性の ISO8601 形式の日時を補完するスニペットを書いてみた。 以下の行を autoload/neocomplcache/snippet…続きを読む
問題3.68 cons-stream を使わないために遅延評価が行われず、interleave の引数が評価されてしまい無限ループに陥る。 (define (pairs s t) (interleave (stream-map (lambda (x) (list (stream-car s) x)) t) (pairs (stream-cdr s) (stream-cdr t)))) 計算機プログ…続きを読む
問題3.66 パス 問題3.67 (define (interleave s1 s2) (if (stream-null? s1) s2 (cons-stream (stream-car s1) (interleave s2 (stream-cdr s1))))) (define (pairs s t) (cons-stream (list (stream-car s) (stream-car t…続きを読む
問題3.65 (define (log-summands n) (cons-stream (/ 1.0 n) (stream-map – (log-summands (+ n 1))))) (define log-stream (partial-sums (log-summands 1))) それぞれの収束の速さの違いが一目瞭然。 partial-sums 手続きを使った場合 (stream-he…続きを読む
問題3.64 (define (stream-limit st tolerance) (let ((s1 (stream-car st)) (s2 (stream-car (stream-cdr st)))) (if (< (abs (- s1 s2)) tolerance) s2 (stream-limit (stream-cdr st) tolerance)))) (define (sq…続きを読む
問題3.63 リーダーマクロを使って sqrt-stream 手続きを調べる。 guesses を使わない場合は、繰り返し sqrt-stream が呼び出されてストリームが生成される。 ;; stream の最初の n 個の要素を印字する手続き (define (stream-head s n) (define (iter s n) (if (<= n 0) ‘done (begin (d…続きを読む