SICPを読む上でよく見るメモ

ゼミのたびに「あの単語の意味ってなんだったっけ?」って事案が多発するので定義をまとめた記事を作ります。 適用順序評価と正規順序評価 正規順序評価(normal-order evaluation) 完全に展開してから簡約する。 適用順序評価(applicative-order evaluation)…

SICPゼミ第59回

練習問題4.41 (define (generate-list n) (define (pow n k) (if (= k 0) 1 (* n (pow n (- k 1))) ) ) (define (int-to-list m n k) (if (= k 0) (list) (cons (remainder m n) (int-to-list (/ (- m (remainder m n)) n) n (- k 1))) ) ) (define (list-ge…

SICPゼミ第58回

練習問題4.38 #lang racket (require sicp-pict) (define (require p) (if (not p) (amb) 0)) (define (distinct? items) (cond ((null? items) true) ((null? (cdr items)) true) ((member (car items) (cdr items)) false) (else (distinct? (cdr items ))…

SICPゼミ第57回[tube_worm死す]

練習問題4.35 (define (an-integer-between low high) (require (<= low high)) (amb low (an-integer-between (+ low 1) high))) 練習問題4.36 (define (a-pythagorean-triple-between) (let ((high (an-integer-starting-from 1))) (let ((i (an-integer-b…

SICPゼミ第56回

練習問題4.32 お気持ち.まあ便利だよね色々面倒なこと気にしなくてよくなるし. 練習問題4.33 クォート式を評価した結果が元々の意味でのリストだったら,今回の意味でのリストに変換する関数をかませるよう評価機を変える. 練習問題4.34 無限リストは先頭…

SICPゼミ第55回

練習問題4.30 a . (for-each (lambda (x) (newline) (display x)) (list 57 321 88)) を呼ぶ。 問題になっているのは eval-sequence に食われる begin 節、すなわち (define (for-each proc items) (if (null? items) 'done (begin (proc (car items )) (for…

SICPゼミ第54回

練習問題4.28 演算子がevalの中で評価されない(遅延されてしまう)場合,すなわち複合手続きが引数として呼ばれた場合,演算子を評価しないままthunkがそのまま返ってきてしまう事がある. 例えば (define (g x) (+ x 1)) (define (f g x) (g x)) とした場合…

SICPゼミ第53回

練習問題4.27 外側の id については application なので評価がされており (引数の (id 10) については評価されずに残っている)、すなわち w の定義時点で count は一度だけインクリメントされていることになる。 答えは 1, 10, 2 となる。

SICPゼミ第52回

練習問題4.25 (define (factorial n) (unless (= n 1) (* n (factorial (- n 1))) 1)) 適用順序言語では先に unless の引数がすべて評価される、すなわち (factorial 0) の評価が先に行われてしまうため、無限ループに陥って停止しない。 正規順序言語では引…

SICPゼミ第51回

ご無沙汰しております 練習問題4.23 Alyssaの解析器 (define (analyze-sequence exps) (define (execute-sequence procs env) (cond (( null? (cdr procs )) ((car procs) env)) (else ((car procs) env) (execute-sequence (cdr procs) env )))) (let (( pr…

SICPゼミ第50回

練習問題4.22 (define (analyze-let exp) (analyze (let->combination exp))) (define (let->combination exp) (let ((defs (let-defs exp))) ((make-lambda (let-variable-from-defs defs) (let-body exp)) (let-defbody-from-defs defs)))) (define (let-d…

SICPゼミ第49回

練習問題4.21 a ((lambda (n) ((lambda (fib) (fib fib n)) (lambda (ft k) (if (< k 2) 1 (+ (ft ft (- k 2)) (ft ft (- k 1))))))) 5) by tube b (define (f x) ((lambda (even? odd?) (even? even? odd? x)) (lambda (ev? od? n) (if (= n 0) true (od? e…

SICPゼミ第48回

練習問題4.20b by チューブワアアアァァァァム

SICPゼミ第47回

練習問題4.20 4.18 と一緒なのでパス。

SICPゼミ第46回

練習問題4.18 (define (solve f y0 dt) (define y (integral (delay dy) y0 dt)) (define dy (stream-map f y)) y) (define (solve_ f y0 dt) (let ((y '*hoge*) (dy '*hoge*)) (let ((a (integral (delay dy) y0 dt)) (b (stream-map f y))) (set! y a) (se…

SICPゼミ第45回

練習問題4.16 (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? (car vals) '*unassigned*) (error "Unassigned…

SICPゼミ第44回

練習問題4.14 なんかタグとかがうまく処理されないと思う。 by tube 練習問題4.15 ネゲートして自分を突っ込む。終わり。 by tube

SICPゼミ第43回

練習問題4.11 (define (make-frame variables values) (if (= (length variables values)) (if (null? variables) nil (cons (cons (car variables) (car values))) (make-frame (cdr variables) (cdr values))) (if (< (length variables) (length values))…

SICPゼミ第42回

練習問題4.7 (define (let*->nested-lets exp) (let ((defs (car exp)) (body (cdr exp))) (if (null? (cdr defs)) (list 'let (car defs) body) (list 'let (car defs) (let*->nested-lets (pair (cdr defs) body)))))) by dolicas 問題文で言ってる派生式…

SICPゼミ第41回

練習問題4.4 (define (eval-and exp env) (cond ((null? exp) #t) ((null? (cdr exp)) (eval (cdr exp) env)) ((not (eval (car exp) env)) #f) (else (eval-and (cdr exp) env)))) (define (and? exp) (tagged-list? exp 'and)) by dolicas 派生式の方もで…

SICPゼミ第40回

2章はやばいので4章に帰ってきました。 練習問題4.2 applicaionかどうかの判定 (application?) はタグを気にせずペアかどうかしか見ていない.これが最後でないと (define …) みたいなのも適用として扱ってしまうのでおかしくなる. call を使うことにするの…

SICPゼミ第39回

練習問題2.92 係数がy の多項式であるx の多項式と係数がx の多項式であるy の多項式の両方が与えられる問題だと考えるとなかなかえぐいので次回に続く。

SICPゼミ第38回

練習問題2.91 (define (install-polynomial-package) ;; 内部手続き ;; poly の表現 (define (make-poly variable term-list) (cons variable term-list )) (define (variable p) (car p)) (define (term-list p) (cdr p)) (define same-variable? eq?) (def…

SICPゼミ第37回

練習問題2.88 install-polynomial-package内に以下の関数を追加する。 (define (inversion termList) (if (empty-termlist? termList) termList (let ((term (first-term termList))) (if (eq? (type-tag term) 'polynomial) (adjoin-term (make-term (order…

SICPゼミ第36回

練習問題2.78からやり直し 練習問題2.78 (define (attach-tag type-tag contents) (if (eq? type-tag 'scheme-number) contents (cons type-tag contents ))) (define (type-tag datum) (if (pair? datum) (car datum) (if (number? datum) 'scheme-number (…

SICPゼミ第35回

練習問題2.82 例えば引数が長方形と菱形と正方形であるときを考えると、全ての引数を平行四辺形に強制型変換しなければならないが、各引数の型へと変換しようとする限り、平行四辺形にはたどり着かない。つまり、型の関係において分岐が生じており、その分岐…

SICPゼミ第34回

2章に帰ってきました。put, get など (define (key-compare a b) 0) (define (make-table) (let (( local-table (list '*table* ))) (define (lookup key-1 key-2) (let (( subtable (assoc key-1 (cdr local-table )))) (if subtable (let (( record (assoc…

SICPゼミ第33回

練習問題4.1 左から右 (define (list-of-values exps env) (if (no-operands? exps) '() (let ((val (eval (first-operand exps) env))) (cons val (list-of-values (rest-operands exps) env))))) 右から左 (define (list-of-values exps env) (if (no-oper…

SICPゼミ第32回

練習問題3.81 (define (rand-stream stream) (define (rand-stream-iter stream mt) (if (stream-null? stream) the-empty-stream (let ((message (stream-car stream))) (if (eq? message 'generate) (cons-stream (mt-random-integer mt 1000) (rand-strea…

SICPゼミ第31回

練習問題3.77 (define (integral delayed-integrand initial-value dt) (cons-stream initial-value (let ((integrand (force delayed-integrand))) (if (stream-null? integrand) the-empty-stream (integral (delay (stream-cdr integrand)) (+ (* dt (str…