2008-04-16から1日間の記事一覧

1. Recursion and Callbacks(fib)

この手の話題で定番のフィボナッチ数列 #!/usr/bin/env perl use strict; use warnings; sub fib { my ($n) = @_; if ($n == 0 || $n == 1) { return 1; } else { return fib($n-1) + fib($n-2); } } print fib($ARGV[0]) . "\n"; 試しに35ぐらいをしてみる…

1. Recursion and Callbacks(dir_walk)

ちょっと復習。。。 この章では、再帰的な処理中に何かにぶつかったときにある処理をさせたい、と言うことを効率的にやる方法が書かれている。 一例はこの通り。 #!/usr/bin/env perl use strict; use warnings; sub dir_walk { my ($top, $code) = @_; my $…

4. Iterators(upto)

Iteratorって何の役に立つんじゃい!!なんて思ってたけど、読んでみると遅延評価そのままやん!! とりあえず本に書いてあった利点をリスト。 巨大なリストを作らなくて済むので省メモリ 深さ優先、幅優先のどちらでも探索が可能(再帰だと深さ優先になる) …

3. Memoization

何回もコールされるような関数はメモ化するに限る。でも、副作用のない状態にしておかないと当然ダメ。 #!/usr/bin/env perl use strict; use warnings; use Memoize; memoize 'fib'; sub fib { my ($n) = @_; if ($n == 0 || $n == 1) { return 1; } else {…

2. Dispatch Tables

条件分岐にDispatch Tableを使うことで 巨大なif-else文を排除できる。 Additiveにできる(これはSICPに書いていることだけど) などの利点がある。あんま使ったこと無いけど、使いかたを覚えればかなり便利そう。 #!/usr/bin/env perl use strict; use warnin…