SICP

exercise 3.53~57

ex3.53 2^nですね、わかります。 ex3.54 (define (mul-stream s1 s2) (stream-map * s1 s2)) (define factorials (cons-stream 1 (mul-stream factorials (stream-cdr integers)))) ex3.55 ;; なんとなく二つ書いてみた。 ;; (define (partial-sums stream) …

exercise 3.52

実家でだらだら過ごしすぎた・・・。 それはともかく、代入が絡むと色々面倒だと実感。 ちなみに以下の説明はほとんど殴り書き・・・。 というか、ちゃんと理解できてるのかな・・・ とりあえず、まずはメモ化してるバージョン。 問題にあるようにsumの値を…

exercise 3.50~51

3.50 (define (stream-map proc . argstreams) (if (stream-null? (car argstreams)) the-empty-stream (cons-stream (apply proc (map stream-car argstreams)) (apply stream-map (cons proc (map stream-cdr argstreams)))))) applyの最後の引数はリスト…

exercise 3.43~46

実家でまたーりしてたら、部活のICPC練習会忘れてた・・・。orz ゆっくりしていった結果がk(ry

exercise 3.47~49

ようやく3.4終了。 ページ自体は短かったが、意外に時間がかかったなぁ。少し長いので続きを読むから。

exercise 3.39~42

parallel-executeとかどうやって実行すんのさ… テストできないと何だかつらいなぁ。まぁそれはさておき、 ex3.39 101, 121以外に 100が生じる。 具体的には、 P1がアクセス→P2→P1が100をxにset! ex3.40 手で書いて試した 10^2, 10^3, 10^4, 10^5, 10^6 の5…

exercise 3.38

a.組み合わせは6通りで、結果は35, 40, 45 ,50の4通り。 b.図が面倒すぎるだろ・・・jkしかし、bは全部洗い出すべきなのかな。でも問題文にはsome other valueってあるしなぁ。

exercise 3.32 続き

とりあえず、試したコードでも張ってみるか

exercise 3.37

解答自体は簡単。注釈の部分が興味深い気がする。 まぁそれはさておきコード晒すか (define (celsius-fahrenheit-converter x) (c+ (c* (c/ (cv 9) (cv 5)) x) (cv 32))) (define (c+ x y) (let ((z (make-connector))) (adder x y z) z)) (define (c* x y) …

exercise 3.36

図をアップするのがめんどいのでパス。 emacsのpicture-modeを試してみるのが良いのかなぁ・・・

exercise 3.35

雛形はできてるし、adderとかの例もあるので簡単かな。 (define (square n) (* n n)) (define (squarer a b) (define (process-new-value) (if (has-value? b) (if (< (get-value b) 0) (error "square less than 0 -- SQUARE" (get-value b)) (set-value! a…

exercise 3.34

multiplierは三つのconnectorのうち二つが確定してれば、もう一つを確定させる。 ということで、 (define (squarer a b) (multiplier a a b)) なんてやると、 bが決まってもaが決まらなくなってしまう。 ちなみにaが決まるとbは決まる gosh> (define a (make…

exercise 3.33

(define (averager a b c) (let ((d (make-connector)) (e (make-connector))) (adder a b d) (multiplier c e d) (constant 2.0 e) 'ok)) こんな感じ。 gosh> (define x (make-connector)) x gosh> (define y (make-connector)) y gosh> (define z (make-co…

exercise 3.32

すこしハマった・・・。ハマった原因と解決した方法は後で晒そう。wireに登録されるand-action-procedureは、呼び出されたときにoutputの値を決め(このタイミングが重要!。agendaから呼ばれるときにoutputの値が決まるのではない)、その後agendaに登録す…

exercise 3.31

コミケで買った同人も消費したのでやることが済んだのでSICP再開。というかそろそろICPCの練習とかも再開したいが、それは別の話か。問題はmake-wireの中のaccept-action-procedure!がprocedureの登録時に一度そのprocを読んでるのは何故か?って話。 (英単…

exercise 3.30 続き

今度は実際に時間を考える。 時間の表記については inverter-delayをi and-delayをa or-delayをo と言う感じで。 half-adder sumは max(a+i, o) + a carryは a full-adder half-adderのsumとcarryをそれぞれs,cとおくと、 sumは s carryは s+c+o ripple-adde…

exercise 3.30

やることがあるのに気づいたら飲み会行って、その後寝てしまった・・・。とりあえず朝に書いたコードでも張っとくか。 (define (make-wire-list n) (if (= 0 n) '() (cons (make-wire) (make-wire-list (- n 1))))) (define (set-nbit-signal! wires signals…

勉強会二日目 exercise 3.1~3.23

部活の勉強会で3.3.2のRepresenting Queまで終了。 とりあえず、書いた演習問題でもさらしてみる。 動作については多分大丈夫、多分。とはいってもごちゃごちゃしたコードの集まりからコピってきたので不安もある。コード書くときは後で見返すことを考えよう…

exercise 3.29

要するに A∨B = ~~(A∨B) = ~(~A∧~B) ってこと。コードは (define (another-or a1 a2 output) (let ((c (make-wire)) (d (make-wire)) (e (make-wire))) (inverter a c) (inverter b d) (and-gate c d e) (inverter e output) 'ok)) ちなみに時間は、a->c,b->…

ex3.28

こんな時間だが、前のエントリにもある通りこのまま寝てしまうのは悔しいので(まぁ寝た方が効率はいいんだろうが)少しぐらいは問題を解いてから寝よう、うん。 以下、適当な回答 (define (or-gate a1 a2 output) (define (or-action-procedure) (let ((new…

読書会

昨日に引き続き、本日も部活のイベント。SICPの読書会でした。今回は3章の初めからスタート。 以前までは発表者を決めて、その人が事前に用意してくる形式だったけど、今回はエクストリームリーディングという形式で読み進めた。とりあえず自分は以前に読ん…

exercise 3.26

最初に「解けた!」と思ったときは、実は単に2.66解いてただけだと分かって、適当に書き直すもうまく動かず。その後結局解答をチラッと見て、なんとかできた。 …いろいろと書きたいことはあるが疲れたので、とりあえずコード貼り付けるだけ

exercise 3.27

東の大きな大学の解答と照らし合わせて、正解を確認。 解くのはいいとして、問題はブログにどうやってあげるかだ・・・・まぁそれはともかくパコパコとフレーム作るのはおもしろかったかな あとメモ化の便利さを実感。以前に部活の講座で聞いたりもしたが、…

exercise 3.26 -- 追記

とりあえず、失敗した点を上げてみる 当初書いててハマったのがこれ (define (insert! key value records) (cond ((eq? records 'empty-tree) (set! records (make-sub-tree key value '() '()))) ;;ここでハマってた ((= key (key-name records)) (set-valu…

exercise 3.24

(define (make-table same-key?) (let ((local-table (list '*table*))) (define (assoc key records) (cond ((null? records) #f) ((same-key? key (caar records)) (car records)) (else (assoc key (cdr records))))) (define (lookup key-1 key-2) (let …

exercise 3.22

実際できるだろうと分かっても、書いて動かすと何か楽しかった。

exercise 3.21

(define (print-queue queue) (front-ptr queue)) とりあえずこんだけ。 まぁ空になってもrear-ptrにゴミが残るのは注釈参照ですな。

exercise 3.23

やっと解けた・・・。もっと精進せねば。

もう一回

以前SICPの解答をちまちま載せていこうと決心するものの、試験とかでダルくなって消してしまった。 夏休みになったので、もう一回チャレンジ ちなみに現状は3.23まできてる。 過去の奴はHDD漁って少しずつ載せていければいいなぁ

exercise 3.25

調子いい感じ。(・・・問題はこの次な気もするが) 以下解答。