SICP

3.3.1 可変リスト構造

久々にSICP Lite#13 http://atnd.org/events/3505 に行ってきたので、復習を兼ねて、3.3.1からやってみま〜す。 方針は、例によって「難しい問題は飛ばすwww 」と言うもの。まぁ、Liteクラスタですから。ここでは、リストを変更する、と言うことで、純粋関数…

2.5 Systems with Generic Operations

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html#%_sec_2.5この辺からだんだんとひよってくるのを感じる。わからないやつは、SICP Liteのときに取り組もう。 2.5.1 Generic Arithmetic Operations http://mitpress.mit.edu/sicp/full-text/bo…

2.4 Multiple Representations for Abstract Data

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-17.html#%_sec_2.4複素数の表現を題材に、 明確な振り分け データ主導 メッセージパッシング の3つのAdditiveな手法を学ぶ、と言うのが本節の主題。 問題自体は少ないのだけど、この節は実際のプログ…

2.3.4 Example: Huffman Encoding Trees

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3.4重要な応用って気がするけど、あんまり理解できていないような気がするなぁ。 今のところ、先に進む方を優先しているのだけど、いつかちゃんと振り返らないと。 問題2.67 ここは打…

2.3.3 Example: Representing Sets

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3.3 集合の操作として、 順序づけられていない集合の場合 順序づけた集合の場合 Binary Treeとして現した場合 の三種類がでてくるとこ。 問題自体も大して難しくなく、全体的にスルー…

2.3.2 Example: Symbolic Differentiation

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3.2記号微分。この辺、個人的には嫌いじゃない。 問題 2.56 指数関数の導入。 ; 構成子 (define (make-exponentiation base exponent) (cond ((=number? exponent 0) 1) ((=number? e…

2.3 Symbolic Data

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3 ここは、何を勉強するんだっけか。目的を忘れるといけないので、Contentsを書いておくと、 2.3 Symbolic Data 2.3.1 Quotation 2.3.2 Example: Symbolic Differentiation 2.3.3 Exa…

2.3.1 Quotation

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-16.html#%_sec_2.3.1ここは問題自体は簡単なのだが、quoteという演算子は結構くせ者な気がする。 こいつは、General Formなんだろうか? それともSpecial Formなのだろうか? 例えば、 gosh> (x 1) **…

2.2.4 図形言語

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.4 今回はさくっといこう。 環境は、DrScheme V3.5.2です。 コレを使うと、図形言語の章が非常に楽です。 ここの節は、問題はつまらんけど、書いている内容がためになる。 閉包性や…

2.2.3 公認インターフェースとしての並び(後半)

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.3後半は、入れ子になっているデータ構造をConventional Interfaceで扱うにはどうするか、と言うお話。お役に立つflatmapもあるので、合わせて憶えておこう。 (define (flatmap proc…

2.2.3 公認インターフェースとしての並び(前半)

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.3 ぼくは、この辺からようやくSICPの面白さ、というか、味がわかって気がします。 それまでは、あんまし目新しいこともなく、どちらかと言うとマゾ性を出さないと乗り切れなかった…

2.2.2 階層構造

この辺り苦手なとこ。 問題2.24 実行例 (list 1 (list 2 (list 3 4))) => (1 (2 (3 4))) ポインタ絵 ツリー絵 問題2.25 (1 3 (5 7) 9) (cadr (car (cddr x))) ((7)) (car (car x)) (1 (2 (3 (4 (5 (6 7)))))) (cadr (cadr (cadr (cadr (cadr (cadr x)))))) …

2.2.1 並びの表現

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2.1 ようやく、リストが出てくる。リストは、ポインタであり、最後のデータのcdrには、nullポインタがセットされている。リストの操作には主に3つある。 リストを順に"cdrダウン"する…

2.2 階層データ構造と閉包性

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-15.html#%_sec_2.2 ここでいうClosure Propertyとは、LISPの世界のClosureとは違うよ、と言っている。 この本では、Closureとは、ある性質で作ったものは、親と同等の性質を有する、と言うこと。 すな…

問題2.7-2.13

問題2.7 (define (make-interval a b) (cons a b)) (define (lower-bound z) (car z)) (define (upper-bound z) (cdr z)) 問題2.8 (define (sub-interval x y) (make-interval (- (lower-bound x) (upper-bound y)) (- (upper-bound x) (lower-bound y)))) …

問題2.6 (λって結局何なのさ〜)

λ計算のところ。データは全て手続きで記述できますよっと。 いや、正直、問題はわかるんだ。ただ、コレが何なのか人に説明できるところまでいってない。とりあえず、問題を解くと、zero, one, twoは、それぞれ、 zero = λs.(λx.x) one = λs.(λx.sx) two = λs…

問題2.5

なんか、現実逃避のためにSICPをやってる気がしてきた。これが終わったら、仕事に復帰します。 ; Constructor (define (cons-exp a b) (* (expt 2 a) (expt 3 b))) ; Selector (car) (define (car-exp z) (if (not (= (remainder z 2) 0)) 0 (+ 1 (car-exp (…

第1章振り返り

手続きの抽象がメインテーマと言うことで、Square Rootの定義を振り返ってみましょう。 定義(p.12) (define (sqrt x) (the y (and (>= y 0) (= (square y) x)))) yが0以上でかつ2乗するとxになるもの と言う定義をそのままS式にしてみました、って感じ。 で…

SICP Lite #4

今回で4回目。ようやく1章の終わりが見えてきた感じですが、何となく大事なことが置いてけぼりの感じもしています。とりあえず、SICPを読む上で、最も難関と言われる数学の話。第1章の主題は、単純な手続きを抽象化する方法を身につけて、汎用な関数を作り上…

問題2.4

これも驚き問題。 (define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lambda (p q) p))) (car (cons x y)) => (car (lambda (m) (m x y))) => ((lambda (m) (m x y)) (lambda (p q) p)) => ((lambda (p q) p) x y) => x ; cdrの定義 (define (c…

2.1.3 What is meant by data?

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#%_sec_2.1.3この節を始めて読んだときは、かる〜く、ていうか、思いっきりカルチャーショックを受けた。 だって、cons, car, cdrがこんなんで定義できんだぜ。 (define (cons x y) (define (d…

問題2.3

長方形のデータ構造。複数のやり方があるんだろうけど、とりあえず一番簡単な幅と高さを表す二つのベクタで定義。 ; 線分の長さを求めるお助け関数 (define (length line) (let ((start (start-segment line)) (end (end-segment line))) (let ((x1 (x-point…

問題2.2

線分のデータ構造。特に考える必要なし。 (define (make-segment start end) (cons start end)) (define (start-segment line) (car line)) (define (end-segment line) (cdr line)) (define (make-point x y) (cons x y)) (define (x-point point) (car poi…

問題2.1

(define (make-rat2 n d) (let ((g (gcd (abs n) (abs d)))) (cond ((or (and (< n 0) (< d 0)) (and (>= n 0) (< d 0))) (cons (/ (* -1 n) g) (/ (* -1 d) g))) (else (cons (/ n g) (/ d g)))))) ま、何も考えずに言われたことをそのままインプリしたって…

2章突入

第1章は手続きによる抽象化法を習った(らしい)。今度は、単純なデータを組み合わせて、複雑なデータ構造を構築して、現実の問題に対処しましょう、と言うところを学ぶようだ(知ってるくせに)。 しかし、Schemeの場合、手続きもファーストクラスであるため、…

問題1.44

(define (smooth f) (lambda (x) (average3 (f (- x dx)) (f x) (f (+ x dx))))) (define (n-fold-smooth f n) (repeated (smooth f) n)) ここらで飽きちゃいました。問題1.45, 46はスキップします。

問題1.43

(define (repeated f n) (define (iter func count) (if (= count n) func (iter (compose func func) (+ count 1)))) (iter f 1))

問題1.42

(define (compose f g) (lambda (x) (f (g x))))

問題1.41

(define (double f) (lambda (x) (f (f x)))) (((double (double double)) inc) 5) (double double)で手続きを4回実行する手続きになるのだけど、それにdoubleを作用させることで、8回適用させることになると思って、実行したらちょっとびっくり。16回適用す…

問題1.40

(define (cubic a b c) (lambda (x) (+ (* x x x) (* (* x x) a) (* x b) c))) ていうか、λの中が汚すぎw