HOP

やっぱミスってた

昨日書いたやつid:yukichanko:20081006はやっぱ間違ってたみたい。 比較的ポート数が多くて、1周波数が何行にもわたってる場合はいいんだけど、1行に1周波数のデータが全て書かれているような場合、ファイルハンドルが一時的に空になってしまうバグがあった…

TouchStone Iterator

仕事がらTouchStone(Sパラメータ)をハンドリングする事が多いので、なんちゃってTouchStone Iteratorを作ってみました。 もっと、スマートに書けるような気もするけど、おいおい直して行きます。 use strict; use warnings; sub NEXTVAL { $_[0]->() } sub I…

再勉強中

HOP

Iteratorあたりを勉強してます。と言うのも、必要にかられて。 仕事がら、Sパラメータと言うのをよく使うんだけど、なかなか市販の波形ビューアで大規模のSパラを見るツールがない。と言う事で、自作しないといけない。だけど、うちらが扱うSパラってアホみ…

4. Iterators (Permutation)

リストの全組み合わせを作る方法。 HOPの内容ではないけど、役に立つのであげておこう。 #!/usr/bin/env perl use strict; use warnings; sub permute { my @items = @{ $_[0] }; my @perms = @{ $_[1] }; unless (@items) { print "@perms\n"; } else { my …

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…

Chapter1: Recursion and Callbacks

この章はRecursionとCallback(Sub Routine Reference)に慣れましょう。と言うのが主な主題(本当かよ!!)。 すなわち、より多くのケースで使えるような汎用的な関数を作るためには、どうしたらよいか!! 例えば、あるデータを処理して、その結果をあるときはテ…