2017-01-01から1年間の記事一覧

SICP 4.1.6

4.16 a (define (lookup-variable-value var env) (define (env-loop env) (define (scan vars vals) (cond ((null? vars) (env-loop (enclosing-environment env))) ((eq? var (car vars)) (if (eq? '*unassigned* (car vars)) (error "Unassigned variable…

SICP 4.1.3-5

4.11 教科書の実装ではフレームは ((var1 var2 var3) (val1 val2 val3)) となっているのを ((var1 val1) (var2 val2) (var3 val3)) と実装し直す。 #lang racket ;変更なし (define (enclosing-environment env) (cdr env)) (define (first-frame env) (car …

SICP 4.1.1-2

4.1 もともとの list-of-values (define (list-of-values exps env) (if (no-operands? exps) '() (cons (eval (first-operand exps) env) (list-of-values (rest-operands exps) env)))) cons の引数をあらかじめ評価してやれば良いので 左から右 (define (…

SICP 3.5.4 - 3.5.5

3.77 #lang racket (define (integral delayed-integrand initial-value dt) (let ((integrand (froce delayed-integrand))) (cons-stream initial-value (if (stream-null? integrand) the-empty-stream (integral (stream-cdr integrand) (+ (* dt (stream…

SICP 3.5.3

3.63 もとのsqrt-stream (define (sqrt-stream x) (define guesses (cons-stream 1.0 (stream-map (lambda (guess) (sqrt-improve guess x)) guesses))) guesses) Louisのsqrt-stream (define (sqrt-stream x) (cons-stream 1.0 (stream-map (lambda (guess)…

SICP 3.5.1-3.5.2

3.50 脚注12 12 Schemeが標準的に用意しているmap手続きは, ここに述べたものより一般的である. より一般的 mapは, n引数の手続きとn個のリストをとり, 手続きをリストのすべての第一要素に作用させ, リストのすべての第二要素に作用させ, 等々させて, 結果…

SICP 3.4.2

3.38 3.38a Peter => Paul => Mary 45 Peter => Mary => Paul 35 Paul => Peter => Mary 45 Paul => Mary => Peter 50 Mary => Peter => Paul 40 Mary => Paul => Peter 40 3.38b 以下のパターンが考えられる 並列実行により、いずれか1人の残高反映が失われ…

SICP 3.3.5

3.33 avalagerは以下の2パターンが考えられる ;avalager (define (avalager a b c) (let ((u (make-connector)) (v (make-connector))) (adder a b u) (multiplier u v c) (constant 0.5 v) 'ok)) ;avalager (define (avalager a b c) (let ((u (make-connec…

SICP 3.3.4

3.28 (define (or-gate a1 a2 output) (define (or-action-procedure) (let ((new-value (logical-or (get-signal a1) (get-signal a2)))) (after-delay or-gate-delay (lambda () (set-signal! output new-value))))) (add-action! a1 or-action-procedure)…