2011-04-01から1ヶ月間の記事一覧

Memento パターン

Memento パターン - Wikipediaオブジェクトを以前の状態に(ロールバックにより)戻す能力を提供、要するにわかりやすい例だとCtrl+Zですね。Caretakerが戻すための状態(Memento)の保持を行い、Originatorが自分の状態を元に戻す仕事を担当するというように役…

学習の記録−5

F#

モジュールの定義方法について モジュール名とモジュールの計算結果として使用する型の名前が同じ場合を.NETは許さないので、モジュールの箇所に [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>] を記述する。これで等から利用する場合、[モジュール名+Module]という名前になるので共存できる。モジュ</compilationrepresentation(compilationrepresentationflags.modulesuffix)>…

学習の記録−4

F#

ボクシング 変数を無理やりvariant型に倒すイメージ。関数boxを使う。元の型での演算はできなくなる。応用例としては型調べる関数作るのに使うっぽい。型名を隠した操作をする時に活躍。 > let x = box 42;; val x : obj = 42 > unbox<int> x;; val it : int = 42</int>…

学習の記録−3

F#

再帰はなるべく末尾再帰(引数が大きくなっても展開式の大きさが一定になるような再帰)を使って書く。 //普通の再帰 let rec fact n = if n > 1 then n * fact (n - 1) else n;; //末尾再帰 let fact_tailrec n = let rec fact n res = if n > 1 then fact …

学習の記録−2

F#

F#では二進数を書くときは0bを頭につける。 > 0b111;; val it : int = 7 符号なし8bitの整数を表すbyte型もある。使いたい時は語尾にuyをつける。 > 0b0001uy;; val it : byte = 1uy > 5uy;; val it : byte = 5uy ビットごとの演算は &&&:AND |||:OR ^^^:XOR…

Observer パターン

Observer パターン - Wikipedia観察対象の状態が変化すると、観察者に対して通知される。Mediator パターンと良く似ているが、パターンの目的や視点は異なる。MediatorパターンではColleague役の間を取り持って、いろいろ処理を融通してやるために状態変化の…

学習の記録−1

F#

以下の式は等価 let x = y in z (fun x -> z) y let f = fun x -> x+10 let f x = x + 10 let f x y = x + y let f = fun x y -> x+y let f = fun x -> fun y -> x+y

小技(無名関数をネストした際の挙動)

R

最近F#のお勉強をしているのだが、そこで(fun x -> fun y -> x + y)みたいに書くと二変数関数のような挙動になるのが自分の直感とちょっとあってないなとつぶやいたら「Rでもできるぜ、そういうの」と言われたのでメモがてら書いておく。 > ff <- function(x…

パッケージ作成の私的まとめ

R

基本以下の参考リンク・スライドを見とけって話。 10分で分かるRパッケージの作り方 View more presentations from yokkuns http://www.okada.jp.org/RWiki/index.php?cmd=read&page=%BB%E4%C5%AA%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%BA%EE%C0%AE%CB%A1&word=bui…

Mediator パターン

Mediator パターン - Wikipediaオブジェクト(Colleague)間の通信を仲介者(Mediator)を通して行うことによって、オブジェクト同士の結合強度を下げる・モジュール間の依存度を下げることができる。以下の例はMediatorとしてチャットルームの管理者的なもの…

Facade パターン

Facade パターン - Wikipediaごちゃごちゃなクラス群を使用するための処理を、Facade(建物の正面の意味らしい)という窓口作ってそこに集約することで見やすくする感じ。あんまりおもしろくない。以下のコードはWikipediaのJAVA版をC++に直したもの。 #inclu…

投資信託「eMAXIS」のデータを分析する−3(ポートフォリオのパフォーマンス編)

R

前回までの記事 投資信託「eMAXIS」のデータを分析する−1(データ取得関数作成編) - My Life as a Mock Quant 投資信託「eMAXIS」のデータを分析する−2(簡単な分析編) - My Life as a Mock Quant 前回までで個別資産クラスのファンドデータを見たので、…

Chain of Responsibility パターン

Chain of Responsibility パターン - Wikipedia複数のオブジェクトを鎖のようにつないでおき、そのオブジェクトの鎖を渡り歩いて目的の処理ができるまでたらいまわしにする。ここではNoSupport→LimitSupport→OddSupportクラスのオブジェクトの順に渡り歩き処…

投資信託「eMAXIS」のデータを分析する−2(簡単な分析編)

R

前回の記事:投資信託「eMAXIS」のデータを分析する−1(データ取得関数作成編) - My Life as a Mock Quant前回書いたeMAXISのデータ取得関数をもうちょっと使いやすいように書き換えた。そしてついでにPerformanceAnalyticsパッケージの使い方を覚えたかっ…

投資信託「eMAXIS」のデータを分析する−1(データ取得関数作成編)

R

「eMAXIS」という手数料の安い素晴らしいインデックスファンドを三菱UFJ投信さんが出しておられてて、サイトをよくみると今までの基準価額がcsvで取得できるようになっているではないか!…ということでそれを自動的に引っ張ってきてRのデータに倒す関数書い…

Visitor パターン

Visitor パターン - Wikipediaデータ構造(Element)と処理(Visitor)の分離を実現。これにCompositeパターンを組み合わせると面白い。 ConcreteVisitorの追加は容易な一方、ConcreteElementの追加は難しい。ダブルディスパッチ - Wikipediaも関係があるので合…

Decorator パターン

Decorator パターン - Wikipediaオブジェクトにどんどんデコレーションをくっつけていくようなイメージ。実際にはどんどんオブジェクトをかぶせていく。くっつけられていくものは”機能”。以下の例はwikipediaに載って得いたJAVAのコードをC++に書き変えたも…

小技「if-elseは値を返すのか…そしてswitchよ、お前もか…」

R

知らなかった。 > if(TRUE){1:10}else{10:1} [1] 1 2 3 4 5 6 7 8 9 10 > if(FALSE){1:10}else{10:1} [1] 10 9 8 7 6 5 4 3 2 1 switch文は他の言語と違ってマッチの方法がちょっと気持ち悪い。文字列使うなってことかな。 > x <- 1:5 > type <- "mean" > sw…

上書きしてしまった関数を掘り起こす(match.fun関数)

R

たとえば以下のようにouter関数を適当な値で上書きしてしまった場合 outer <- 1:5 このままではouter関数を呼ぼうと思ってもouter変数を読んでしまうことになるが、match.fun関数を使って match.fun(outer) としてやることで上書きしてしまった関数を掘り起…

Composite パターン

Composite パターン - Wikipedia容器(Composite)と中身(Leaf)を同一視(Component)して、再帰的な構造を作るデザインパターン。以下の例のようにファイルとフォルダの関係のようなもん。一般に木構造で書けるものはこのパターンが当てはまる。addメソッドをど…

Strategy パターン

Strategy パターン - Wikipediaアルゴリズムを簡単に切り替えることができるようにしておくことで、同じ問題を別の方法で解くことを容易にする。Strategy パターンの クラス図は Bridge パターン - My Life as a Mock Quantのものと表面的には同じ。 #include<string></string>…

Builder パターン

Builder パターン - Wikipedia構造をもったオブジェクトを作成するパターン。構造を作り上げる過程の詳細はDirectorが隠ぺい。またDirectorは建築会社(Builder)にオブジェクト(今回はテキスト)の作成を依頼するものの、どこの会社(Text or HTMLBuilder)…