26042007 wii
ユッキー(娘,1才)がワンワン大好きでお風呂上りにRimoの動物チャンネルなどで画面に釘付けにさせといてパジャマを着せる作戦など有効だ。
というわけで、バーバの家でもWiiでRimo見たい!と応募してみるヨ
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とかアジャイル開発にかぶるような気がするんだけど、いまいち消化しきれてないかも。
ただし、実践するには結構ハードルが高そう。レビューにも
あとはこの手法をどうやって自身で実行するかは、読者の問題となる。
と書いてあるように、この部分を抜いて読めば色々な発見があるし、試してみたいこともある。
こんなんをもとに、独りブレストとか独りイノベーションとか考えていくとおもろいかも。
SICPのp.19に再帰的プロセスと再帰的手続きを混同しないようにとかいてあるのだけれど、
perl - to goto or not to goto, that's the continuation
と、そこから張られた一連のリンクを読んでいてなんとなく掴みかけてきた感じがした。
あとはコメントの、continuationってgotoの意味論研究の過程で生み出された抽象概念ですよ。っていうあたりとか。
なんでも再帰も僕の理解にお役立ち。
末尾再帰がループと同等に実行されるのは、コンパイラによるオプショナルな最適化ではない。 Schemeは、末尾呼び出しでスタックを消費しないことを言語規格上要求している。
SICPおもろい。
22042007 Python turbogears
TurboGearsのTrac にスクリーンキャストが幾つかあったので英語の勉強も兼ねて見てた。
TurboTunesTutorial.movでCatwalkの使い方が解説されてた。
相変わらずSICPをelispで
(defun goodenough (guess x)(< (abs (- (* guess guess) x)) 0.001)) (defun improve (guess x) (average guess (/ x guess))) (defun average (x y) (/ (+ x y) 2)) (defun sqlt_it (guess x) (if (goodenough guess x) guess (sqlt_it (improve guess x) x))) (sqlt_it 1.0 5) 2.2360688956433634