SICP

SICP読了!

・・・と書くと昨日かそこらに読み終わったみたいですが、実際は6/25ぐらいに読み終わっていたという。気付けば読み始めてから一年ちょい。得られたものはあった・・・と信じたい。感想はまたそのうち。

学校の課題

今受けている授業の中でSICPをテキストとしている授業があって、毎度演習問題が宿題になる。ということで今日もここの過去ログからコピって印刷していく作業・・・ そういやサークルの方での読書会は5章に突入 ついに終わりがみえてきた。ここまで来たし演習…

exerise 4.55-69

もうblogじゃないね、ここのサイト....。(今更) ただの演習うp場になっとる。 ちなみに部活の読書会で4章読み終わるなどしてたり。5章はどうなるんかなー。まぁそれはともかく、せめて4章の演習は終わらせたい。あと少しだしね。 てな訳で以下解答。 ちなみ…

exerise 4.50-54

むーん。ということで再掲その3。RSSとかでこの記事確認してる方に色々混乱させてしまい申し訳ないです。(といってもここのRSS見てる人殆どいない気もするが)

exerise 4.44

日記が長いのか知らんが昨日の分が上手く見れないので、今日の分として再掲。 なんぞこれー・・・。

exerise 4.45-49

再掲その2。変な操作したんかなぁ・・・。まぁ日記の下書きはこっちで持ってるからいいけど。4.3の Parsing natural language の演習分。 長いので続きから

exerise 4.41,42,43

明日が最後の試験となるとblog更新にも熱が(ry exercise 4.41 ambを使わずに multiple-dwelling を解け という問題。 以下が以前書いた解答。 我ながら酷い解答だな、おい。 (use srfi-1) (use util.combinations) (define (multiple-dwelling) (define (bak…

exerise 4.38,39,40

気付いたらずっとblog放置しとった・・・。 そろそろまたサークルでのSICP読書会もあるっぽいし、また読み始める気分。 せめて春中には読み切りたいなぁ(夏もおまえそんなこと言ってただろ、とか言う突っ込みは無しの方向で) とりあえず授業中にちまちま進め…

exercise 4.35~37

ambの実装に対しての理解も進んだ(はず)なので問題に戻る。 exercise 4.35 (define (an-integer-between a b) (require (not (> a b))) (amb a (an-integer-between (+ a 1) b))) 実行してみると、 ;;; Amb-Eval input: (a-pythagorean-triple-between 1 15)…

Reading ch4.3

ambの実装のあたりを現在読み終わった。 言ってることは分かるのだが実際に動いてるイメージがつかみにくい。 理解しきるまであと一歩という感覚。久々だなぁ。 とりあえず紙にでも書いてみるか。 読んでて思ったんだが、call/ccとは一文字も書いてないけど…

exercise 4.32~34

最近進行が遅いorz。 まさに光陰なんとら。・・・ていうか、このままだと4章終わんないよ(泣) 予定が潰れた一番の原因は某ゲームだが、そんなこと言っても始まらん。 それにゲームはゲームで楽しめたのだから、それを否定したくは無いしね。 exercise 4.32 c…

exercise 4.29~31

exercise 4.29 (square (id 10)) はメモ化に関わらず100 countはメモ化有りだと1、無しだと2。 squareの中で(* x x)ってなってるので、メモ化しないと(id 10)が2回計算されるんです な。 exercise 4.30 a.うまく説明できないけど、newlineもdisplayもprimiti…

exercise 4.27~28

exercise 4.27 なんか似たようなのを3章でやったなぁ・・・、と思ったらfootnoteにかいて あったか。とりあえず結果は ;;; L-Eval input: count ;;; L-Eval value: 1 ;;; L-Eval input: w ;;; L-Eval value: 10 ;;; L-Eval input: count ;;; L-Eval value: 2…

exercise 4.25~26

はいはい気付いたらリトバスしてましたよ、っと。とは言えそろそろ一区切りついた感じなので、今度こそSICP再開。 exercise 4.25 applicative-order -> 無限ループ。unlessの条件判定と一緒に(* n (factorial (- n 1)))も計 算しちゃうので、 とまらずに fac…

exercise 4.22~24

ex4.22 analyzeにlet->combninationを加えるだけ (define (let? exp) (tagged-list? exp 'let)) (define (let->combination exp) (let ((bindings (cadr exp))) (cons (make-lambda (map car bindings) (cddr exp)) (map cadr bindings)))) ;;analyzeに以下…

exercise 4.19~21

ex4.19 ・・・実行順序、というかdefineの書く順番を変えれば、それっぽく動かすことも時にはできるだろうが、一般的な手法は私にはさぱーりです・・・。 ex4.20 a (define (letrec-bindings exp) (cadr exp)) (define (letrec-body exp) (cddr exp)) (defin…

exercise 4.18

続き ex4.18 やってみる前に解答。 4.18の例だと、dyの定義時にyが*unassigned*でエラー。 ようするに、この例だと、内部定義を相互に行えないというかなんというか。まぁということで実行してみるか。 まず、delayとかの準備 (define (delay-exp exp) (cadr…

exercise 4.11~4.12

むー。書き貯めてたのをいっぺんにうpするのはめんどい・・・ まぁここ最近ネット環境が無かったので仕方ないか。 あと、明日(というか今日)は下宿に帰ってリトバス三昧な予定なので、今うpらないと・・・ ex4.11 (define (make-frame variables values) (…

exercise 4.5~4.10

ex4.5 こんな機能もあったのか、condよ・・・。 (define (cond-recipient-clause? clause) (eq? (cadr clause) '=>)) (define (cond-recipient clause) (caddr clause)) (define (expand-clauses clauses) (if (null? clauses) 'false ; no else clause (let…

exercise 4.1~4.4

4章開始。 gaucheだとうまく実行出来ないので、mzschemeに変えてみた。なんだか悔しい・・・。ちなみにgaucheだと ;;; M-Eval input: (+ 1 1) gosh: "error": invalid application: ((primitive #<subr +>) 1 1) とエラー・・・。promitiveなprocedureを呼ぶと揉める</subr>…

SICPの外側?

ここのところずっとSICPのターン!な訳であったが、たまには気分転換ということでマクロ、入出力、継続、それにYコンビネーターだの今まで気になってたけど後回しにしていた部分を覗いてみた。(あぁそういえば多値は見てなかったなぁ) 参考にしたのは主に …

SICP 3章読了

ようやく演習も含めて終了。 この章は並列処理だの遅延評価だの自分にとっては馴染み薄いものが多くておもしろかった。とくに3.5のStreamsの章が楽しめたように思う。 ちなみにかかった日数は30と少し。本音を言うと20日間くらいで終わらしたかったが(夏休み…

exercise 3.73~82

ようやく3章終了か。 ex3.73 (define (RC r c dt) (lambda (i v0) (add-stream (scale-stream i r) (integral (scale-stream i (/ 1.0 c)) v0 dt)))) 実行してもあってるか確かめにくいなぁ。 ex3.74 (define zero-crossing (stream-map sign-change-detecto…

exercise 3.72

前回適当に解いちゃった3.72であるが、問題文をちゃんと読むと 組み合わせはピッタリ三つでなくてもいいっぽい気がする。 あとで直しておくか。

exercise 3.68~72

生活リズムがこわれているので(昨日は9時睡眠、5時起床。正確には17時起床だけどね☆)、徹夜して翌日の夜まで起きる→寝る→生活リズムが戻るね! ・・・とかバカな考えを実行中。後半に行くにつれ分け分からんコードになっているのは使用です。 まぁいいや、…

exercise 3.67

少し勘違いしてたので解くのに時間がかかった・・・orz (define (pairs s t) (cons-stream (list (stream-car s) (stream-car t)) (interleave (stream-map (lambda (x) (list (stream-car s) x)) (stream-cdr t)) (pairs (stream-cdr s) t)))) ほむ。某所に…

exercise 3.66

まぁ多分答えは出せたはず。 ただし証明はしてない。どうしましょ。 とりあえず、紙に書いて適当に推論した結果がこれ (define (ref-of-m-n m n) (cond ((> m n) (error "m is larger than n!" (list m n))) ((= m n) (- (expt 2 m) 2)) (else (- (* (expt 2…

exercise 3.64, 65

まずい、今日は進みが遅い・・・。 それ以上に生活リズムが… ex3.64 (define (stream-limit stream tolerance) (if (< (abs (- (stream-car stream) (stream-car (stream-cdr stream)))) tolerance) (stream-car (stream-cdr stream)) (stream-limit (stream…

exercise 3.63

こういう「説明せよ!」というタイプの問題は単純にコード書くより時間がかかる・・・orz問題は (define (sqrt-stream x) (cons-stream 1.0 (stream-map (lambda (guess) (sqrt-improve guess x)) (sqrt-stream x)))) (define (sqrt-stream x) (define guess…

exercise 3.58~62

やっとch3.5.2が終わった・・・ いつになったら4章にたどり着くのやら。 っとその前に、無限リストだとdisplay-streamではちょっと不便なので (define (display-stream-n-lines stream n) (if (= n 0) 'done (begin (display-line (stream-car stream)) (dis…