Perl

Strategyパターン生成の柔軟化

処理の動的な切り替え。設定ファイルからどのクラスをインクルードして実行するかを決定。クラスのインターフェースがそろってればどんなクラスでも構わない。 プログラム: use strict; use warnings; use File::Spec; use FindBin; use YAML; use lib $Fin…

コンバータ的なもの

テキストファイル内に含まれるキーワードを別の文字列で置換するプログラム。 キーワードと置換後文字列は設定ファイル(YAML形式)で指定 設定ファイル名はプログラム名の拡張子を『.yaml』にしたもの 置換後文字列はファイル指定が可能(ファイルの内容で…

名前付きサブルーチンのリファレンス。Cでいう関数ポインタ。 use strict; my $who = shift(@ARGV); my $ref_yeah = \&yeah; my $ref_hello = \&hello; $ref_yeah->($who); $ref_hello->($who); sub yeah{ my ($who) = @_; print "yeah! $who\n"; } sub hell…

PerlでCommandパターン

Receiverクラスが実装。ReceiverクラスをCommandクラスでラップして実装をカプセル化。CommandクラスはAdapterパターン的に利用する。ContextからRecieverを分離するため、Invokerを通じてCommandオブジェクトを呼び出す。下のプログラムにはないけど、Invok…

線形クラス分類

サポートベクターマシン入門作者: ネロクリスティアニーニ,ジョンショー‐テイラー,Nello Cristianini,John Shawe‐Taylor,大北剛出版社/メーカー: 共立出版発売日: 2005/03/01メディア: 単行本購入: 8人 クリック: 135回この商品を含むブログ (42件) を見るこ…

線形クラス分類用トレーニングデータ生成

対象関数、データ範囲、ノイズはYAMLで読み込む。対象関数の次元とかノイズを抽象化して、イケてる感じに書けないかしら。DataFactory.pl use strict; use warnings; #use Data::Dumper; my $factory = new DataFactory($ARGV[0]); for(my $i = 0; $i < 1000…

PerlでStateパターン

StateからContextへの参照はリークを防ぐためにScalar::Util::weakenを利用する。状態マシンだから仕方がないとはいえContext〜State間のくっつき具合は気持ち悪い。状態を追加する際にContextに手を加えずに済む実装方法はないものか。 use strict; use war…

N($mean, $deviation^2)なる正規分布に従った乱数生成。一様乱数はメルセンヌツイスタ。任意の確率分布の乱数をしたい場合は、、、確か逆関数法とか棄却法とかで頑張るんだった気が。 use strict; use warnings; use Math::Random::MT qw(rand srand); use M…

WWW::Mechanizeを利用してサイトのデータを取得。エンコードの解決のために一旦Mechanizeオブジェクトが保持するcontentからエンコード形式を推測しておかないといけない。 use strict; use warnings; use WWW::Mechanize; use Encode; use Encode::Guess; u…

PerlでDecoratorパターン

use strict; my $component = new ConcreteComponent(); my $decorator = new ConcreteDecorator($component); $decorator->operate(); ############################## # Component { package Component; sub new{ my $this = shift; my $obj = { @_ }; ret…

PerlでObject Adapterパターン

use strict; my $adaptee = new Adaptee(); my $adapter = new Adapter($adaptee); $adapter->request(); ############################## # Adapter { package Target; sub new{ my $this = shift; return bless { @_ }, $this; } sub request{ die "need o…

PerlでStrategyパターン

ようやくリファレンスや継承に慣れてきた。 use strict; use warnings; my $strategyA = new ConcreteStrategyA(); my $strategyB = new ConcreteStrategyB(); my $context = new Context($strategyA); $context->contextInterface(); $context->setStrategy…

PerlでObserverパターン

Subjectにremoveがないこと、ConcreteObserverのコンストラクタでSubjectオブジェクトを設定しているけど、まあいいんじゃないでしょうか。 use strict; my $subject = new ConcreteSubject(); my @observers = (); for(my $i = 0; $i < 5; $i++){ my $tmp_n…