20時集まり予定だったんだけどいきなり遅刻。
浜町についてid:itkzに電話して合流。
id:itkzが近くにあった神社のお供え物*1を盗もうとしていたのでとりあえずツッこむ。
油揚げマジうまい。*2
ドワンゴの中に入ると、会議室らしきところでもう一人Aさんがいた。
簡単に自己紹介して早速PCのセットアップ。
自宅のサーバーに接続してLISP関係のプログラムを探していると、Aさんから「Gaucheがイイヨ」って勧められるのでとりあえず入れてみる。
kasuya@proc:~$ aptitude install Gauche kasuya@proc:~$ gosh gosh>
" for gosh fun! RunGosh() let resultfile = '~/tmp/vim/gosh-eval-test.txt' set noswapfile w silent exe '!gosh '.expand("%").'> '.resultfile silent exe 'pedit '.resultfile set swapfile endfun nmap <leader>t :call RunGosh()<cr>
これで
準備が終わったのでようやくSICPの問題を解き始める。
itkzとAさんから、「先週は、問題1.3をエレガントに書くにはどうしたらいいか、ということをずっと話したりしていた」ということを聞いていたので、俺も負けじと問題1.3に手をつけてみる。
問題本文
三つの数を引数としてとり、大きい2つの数の二条の和を返す手続きを定義せよ
んで、つくってみたのが、これ。
(define (main args) ; (max-two-square 1 2 3) ; (max-two-square 4 5 6) (print (max-two-square 8 9 7)) ) (define (max-two-square x y z) (define (max a b) ( if(< a b) b a ) ) (define (mid a b c) (define (min a b) ( if(< a b) a b ) ) (- (+ a b c) (max a (max b c)) (min a (min b c)) ) ) (define (square x) (* x x) ) (+ (square (max x (max y z))) (square (mid x y z))) )
maxとminは簡単に取れるんだけど、上位2つの値がとれないため、x y z の値を全部足して、最大値、最小値を引くことにして、 mid というのを定義した。
あとは、max と mid を2乗して終わり。効率とか考えていないけど、まあいいや。
なんとなくだけど、効率よりステキな書き方を考えたほうがいいのかなぁ、と思ってみたりする。
んで、終電を逃してしまいそうになり、解散。
id:itkzとAさん、昨日はありがとうございました。
また誘ってください。
- 作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/02
- メディア: 単行本
- 購入: 35人 クリック: 1,149回
- この商品を含むブログ (480件) を見る