27042007 R
目次を見る限り、一部と二部を分冊にしたほうが嬉しいかも。
二部だけだったら買ったと思うが無駄に分厚かったりするとやなので書店で立ち読みしてから、買うか買わないか決めよう。てか、九天のRの本は紙質とか構成がなんとなくアレな気がするんだけど、この本はどうだろう?
27042007 R
目次を見る限り、一部と二部を分冊にしたほうが嬉しいかも。
二部だけだったら買ったと思うが無駄に分厚かったりするとやなので書店で立ち読みしてから、買うか買わないか決めよう。てか、九天のRの本は紙質とか構成がなんとなくアレな気がするんだけど、この本はどうだろう?
昨日弱音を吐いたけど、小鼓呑んで頭がまわってないだけだった。(どうしても日本酒が飲みたくてローソンで買った。ゴールデンウィークは実家に帰って会津とか那須のほうの酒を物色予定)
SICPのp.32はこんな感じで
(defun inc (n) (+ n 1)) (defun cube (x) (* x x x)) (defun sum (term a next b) (if (> a b) 0 (+ (funcall term a) (sum term (funcall next a) next b)))) (sum 'cube 1 'inc 10) 3025
関数はクォートして評価されないようにしといて、高階関数のほうでfuncallで評価する。こんな感じになってくるとなんかperlのリファレンス操作してるみたいだ。
とか思ったのでperlでも書いてみた。
my $inc = sub {$_[0] + 1}; my $cube = sub {$_[0] ** 3}; sub sum { my ($term,$a,$next,$b) = @_; return 0 if $a > $b; $term->($a) + sum($term,$next->($a),$next,$b); } print sum($cube,1,$inc,80);
Emacs辞典の4章がelispの基礎でわかりやすい。
あと
(sum 'cube 1 'inc 51)
で
(error "Lisp nesting exceeds max-lisp-eval-depth")
っていうエラーがでた(Meadow)
26042007 catalyst
ちょっと前に作ったCatalystのアプリのView::TT->processが相当遅いので、プロファイリングできんかなと調べた。
DBICだとこんなんが使えるらしいが、TTの場合はconfigにTIMERをセットするとレンダリング時間を測定してソースのコメントに突っ込んでくれる。
26042007 wii
ユッキー(娘,1才)がワンワン大好きでお風呂上りにRimoの動物チャンネルなどで画面に釘付けにさせといてパジャマを着せる作戦など有効だ。
というわけで、バーバの家でもWiiでRimo見たい!と応募してみるヨ
25042007 elisp
このあたりでなんか嫌な予感がしてたのだけど、elispでの高階関数の書き方がわからん。
いろいろ悩んでみたものの
SICPを読み始めた目的はHOP本をより楽しく読むためだということを思い出し、普通にschemeでもいいかな?と弱音を吐いてみた。
Higher-Order Perl: Transforming Programs with Programsというわけで、Gaucheもあわせて使っていくことにした。
ただ、elispの件はゴールデンウィーク中にでもちゃんと調べる。
こんな感じで
(defun pscl (x y) (cond ((< y 3) 1) ((= x 1) 1) ((= y x) 1) (t (+ (pscl (- x 1) (- y 1)) (pscl x (- y 1)))) ))
schemeだとelseのところがelispだとtになる。どの条件にも当てはまらないとnilだから、elseはtで表現するらしい。
(defun A (x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (t (A (- x 1) (A x (- y 1))))))
Ackerman関数ってのが良く分からなかったので調べたら爆発的に計算量が増える関数らしい。しかも末尾再帰的にならないらしい
24042007 perl
404 Blog Not Found:perl - 万能なnewの書き方
しかし、デフォルト値を持たせたければどうすればよいか、こうすればよい。
bless { %default, @_ }, $class;
これでなんでうまくいくのかよくわからなかったのでperlshでいろいろ動かしてみた。
main[61]$ %a = (name => 'anon', pet => 'none') name anon pet none main[62]$ %b = (name => 'kzfm', pet => 'hana') name kzfm pet hana main[63]$ %c = (name => 'yuki') name yuki main[64]$ $d = bless {%a,%b} main=HASH(0xa123ce8) main[65]$ print Dumper($d) $VAR1 = bless( { 'pet' => 'hana', 'name' => 'kzfm' }, 'main' ); 1 main[66]$ $g = bless {%a,%c} main=HASH(0xa123e94) main[67]$ print Dumper($g) $VAR1 = bless( { 'pet' => 'none', 'name' => 'yuki' }, 'main' ); 1
別にblessせんでも
main[77]$ $d = {%a,%b} HASH(0xa123ce8) main[78]$ print Dumper($d) $VAR1 = { 'pet' => 'hana', 'name' => 'kzfm' }; 1 main[79]$ $g = {%a,%c} HASH(0xa123d24) main[80]$ print Dumper($g) $VAR1 = { 'pet' => 'none', 'name' => 'yuki' }; 1
うーん、思った通りに動いている。というわけで、一度アレイにしてみる。
main[88]$ $d = [%a,%b] ARRAY(0xa123fd8) main[89]$ print Dumper($d) $VAR1 = [ 'pet', 'none', 'name', 'anon', 'pet', 'hana', 'name', 'kzfm' ]; 1
ちゃんとアレイができているので、これをハッシュのリファレンスにしてみる。
main[90]$ $x = {@{$d}} HASH(0xa124080) main[91]$ print Dumper($x) $VAR1 = { 'pet' => 'hana', 'name' => 'kzfm' }; 1
おー、思ったとおり。
アレイからハッシュにするときにインデックス値の小さい順に評価されていって、同じキー値を持つものは上書きされていくのか。
23042007 web
23042007 project
読んで素直に面白かった。思いついたらすぐ作ってみるっていうことを実践するための組織のつくりかたとかそんな感じ。
なんかTDDとかアジャイル開発にかぶるような気がするんだけど、いまいち消化しきれてないかも。
ただし、実践するには結構ハードルが高そう。レビューにも
あとはこの手法をどうやって自身で実行するかは、読者の問題となる。
と書いてあるように、この部分を抜いて読めば色々な発見があるし、試してみたいこともある。
こんなんをもとに、独りブレストとか独りイノベーションとか考えていくとおもろいかも。