2017-01-01から1年間の記事一覧
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…
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 …
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 (…
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…
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)…
3.50 脚注12 12 Schemeが標準的に用意しているmap手続きは, ここに述べたものより一般的である. より一般的 mapは, n引数の手続きとn個のリストをとり, 手続きをリストのすべての第一要素に作用させ, リストのすべての第二要素に作用させ, 等々させて, 結果…
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人の残高反映が失われ…
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…
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)…