SICP

SICP を読んでみる #70 第二章 p.113

仕事の締切やらその後の溜まったタスクの消化やら集中力が続かないやら(これがほとんど)で気づけば一週間ぶりの SICP です。ここで途切れないように粛々と続けていきます。

今やっているあたりはプログラムを書いていれば当たり前な内容なので、問題をこなすためにモロモロの準備をするのが結構ダルいというのもあって微妙に乗り気になれないのがテンション低めな原因です。かと言って、問題をこなしたらこなしたでいろいろ発見があるので飛ばすわけにはいかないんですね。

問題解答

問 2.77
いい加減 put/get が手元のないとどうしようもないので先人の知恵を借りよう。。。。とおもったらひげぽんさんの記事につきあたる。同じ所まで同じ教科書で勉強してみてわかるけど、この人すごいな、、、、数倍のスピードで数倍以上の習得度があるorz。これだけの差をガツンと目の前に突きつけられると凹む。→記事を最後まで読んだら、問題2.74 をやるのに3時間くらいって書いてありました。成果とかかった時間がわかるとすごくいい目安になります。

この問題がおわったら、これまでのふりかえりともあわせてここまでのひげぽんさんの記事と自分の理解した内容を突き合わせよう。

ひげぽんさんの作った put/get はこちら。

(define op-table (make-hash-table))

(define (put op type item)
    (if (not (hash-table-exists? op-table op))
        (hash-table-put! op-table op (make-hash-table)))
    (let ((type-table (hash-table-get op-table op)))
      (hash-table-put! type-table type item)))

(define (get op type)
    (if (not (hash-table-exists? op-table op))
        (hash-table-put! op-table op (make-hash-table)))
    (let ((type-table (hash-table-get op-table op)))
      (hash-table-get type-table type)))

get って、op がなかったら結局 type を取得する時にエラーになるから

(define (get op type)
    (let ((type-table (hash-table-get op-table op)))
      (hash-table-get type-table type)))

これでも同じなんじゃないだろうか?

とにかく、これで put/get が手に入ったので問題にとりかかります。

(put 'real-part '(complex) real-part)

これが get されたときの挙動を確認。”‘(complex)” の部分がよくわからない。
そもそも complex がどこで定義されていたっけ? →単に (complex) というリストを作っているだけだった。このレベルで忘れているとは、、、、

そもそも (make-complex-from-real-imag 3 4) が正常に動かない。調べると op-table に ‘make-from-real-imag は登録されているものの、その先が空っぽいんだけど何故!?

ちょっと時間がかかりすぎたので今日はここまで。明日再チャレンジ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です