ちなみに

火曜日の空は僕を押しつぶした。

SICP勉強会にいってきた。

Sadistic Internet Communication Protocolの勉強会に逝ってきました。

冗談です。ほんとはかの有名な「Structure & Interpretation of Computer Programs」(計算機プログラムの構造と解釈)の勉強会です。午前中はGaucheの勉強会もあったようですが本買ってないのでパスしました。

あんな人こんな人も参加されていました。

さて、

内容ですが、今回は1.1.1から1.1.6までエクストリームリーディング(になってなかったとの指摘も)して、そのあと問題を1.5まで解きました。
皆さんかなり真面目に取り組んでおられたのですが、僕は結構いっぱいいっぱいでなんとなく理解したら進めるようにしてかなり手を抜いていました。最初がこんな調子だとあとがしんどそうですが、無駄に悩んで立ち止まるよりとりあえず一通り読みきるのを目標にやったいきたいと思います。

LTもあったのですが、内容もさることながら皆さん発表自体がうまいなという印象でした。輪講ですらぼろぼろの僕はあれぐらい発表できるようにもっと場数を踏まなくてはいけないにゅ。(語尾はfor yxxxrin)

Scheme意外とかわいくてびっくりしました。ちょくちょく触って遊んでみます。


練習問題をやったのを張っつけとくので見たい方だけどうぞ。

問題 1.1

打ち込んで確かめるだけなので省略

問題 1.2

(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
   (* 3 (- 6 2) (- 2 7)))

;=> -37/150

問題 1.3

(define (f1.3 a b c)
  (define (g x y)
    (+ (* x x) (* y y)))
  (cond ((or (> a b c) (> b a c)) (g a b))
        ((or (> a c b) (> c a b)) (g a c))
        ((or (> b c a) (> c b a)) (g b c))))

; (f1.3 10 20 30) => 1300

問題 1.4

引数bの正負を判定して正なら+、負なら-を返し、それを引数aとbに適用する。
データと手続きを同じものとして扱っているから可能(?)

example
gosh> (a-plus-abs-b 6 4)
10
gosh> (a-plus-abs-b 6 -4)
10

問題 1.5

無限ループになる。
正規順序の評価(normal-order evalution)を行っているため(p)の値を評価しようとして永遠と(p)の適用が続くため。