F#

クラス/レコードのオブジェクトを別な変数でlet束縛した時、これは値じゃなくて参照です

F#

F#で適当なクラスのオブジェクトを作って、それを他の変数にlet束縛しても、それは値の丸コピーではなくて、参照になるとそういうことです。 > type Hoge(x:int)= - member val X = x with get, set;; type Hoge = class new : x:int -> Hoge member X : int…

実はF#のオブジェクト指向ってしっくりこないんです!

F#

頭出し ネタが古い上に、C++に毒されているせいか、F#のOOP、つーかクラスの書き方がどうもしっくりこないので、まとめる。 七誌さんの F# - 七誌の開発Wiki がとても良かった。言い訳すると「えーマジクラス!?キモーイ。クラスが許されるのはC#までだよね…

typeで型に別名を付ける

F#

type使えば型に別名付けれるのか。C++のtypedefっぽい。 以下は、float*floatなタプルを例に、そのデータ型に対する+演算子をオーバーロードしてベクトルの和を計算させてみるって簡単な話。 > type Vector2D<'a> = 'a*'a;; type Vector2D<'a> = 'a * 'a > l…

気が付いたらRがF#になる日が来るのかもしれない、そんなことを考えていました

R F#

春ですね。最近はめっきりいろんなものの進化、早いですね。 例えばR界隈でいうと、データフレーム捌き用の高速処理ライブラリ「dplyr」の登場によって、 俺がおおよそ一年前に作ったplyrの資料がもう一年も経たずに役に立たなくなる。そういう進化の早い世…

ツリー構造を作る時のメモリを減らしたい

F#

Functionally option pricing by binomial tree - My Life as a Mock Quant で作成したツリー構造(完全二分木)だと、木の深さ/高さNに対して2^Nメモリ食うんでそれなんとかしたいぞと、 上記の例の場合、ノートの結合があるので、メモリ消費量は本来Nオー…

Functionally option pricing by binomial tree

F#

Introduction You may already know, there are their own implementation of option pricing codes by binomial tree model on the Web(see Reference) , and binomial tree method is no longer popular way to get a option price in Finance/Financial e…

フィボナッチ数計算を動的計画法/メモ化再帰でやる

F#

すぐ忘れるのでいい練習題材だなって。 この記事下部に張った参考リンクのwikipediaさんによると、動的計画法ってのは多義的なもんらしい。 使い分けとしては 動的計画法:問題を前から順に解いてく(ボトムアップ方式) メモ化再帰:問題を後ろから解いてく(…

俺の判別共有体にもValueプロパティを入れたい

F#

F#に組み込まれてるoption型だと > let x = Some 33;; val x : int option = Some 33 > x.Value;; val it : int = 33 というようにValueプロパティを使ってその"中の変数"にアクセスできるわけですが、 以下のように俺俺判別共有体を使うと > type Hoge = Ho…

レコード型には関数もブチ込めるんですか、そうですか

F#

そういうことらしい。 > type Hoge = {Func:int -> int};; type Hoge = {Func: int -> int;} > let x = {Func=(fun x -> x*2)};; val x : Hoge = {Func = <fun:x@49>;} > x.Func 5;; val it : int = 10</fun:x@49>

判別共用体にもメソッド追加できるんですか、そうですか

F#

今ざーっと を写経しているのですが、そこで判別共有体にもメソッドが追加出来ることを知ってビックリしましたわい、F#は無限大だな〜!以下は「平日」と「週末」を分ける判別共有体(WeekType)を定義してそこにメソッドを追加する例。 > type WeekType = - |…

Excelでランダムフォレスト(Random Forest)したっていいじゃないか、にんげんだもの

R F#

この記事はマルチポストなアドベントカレンダー記事なんだ、すまない諸君 この記事は R Advent Calendar 2013 : ATNDの27日目の記事で、26日目は@berobero11氏で「RStanで『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた」でした…

R Type Providerで回帰分析

R F#

F#上でRを使って回帰するにはどうしたらええんじゃい?ってのを簡易メモ。 実行前に#rつかってRProvider & RDotNetにリファレンス張る必要がある。流れとしては リファレンス張って〜 回帰(R.lm)して〜 結果(R.summary)表示 って感じ。最後のsummaryの結果は…

string → floatの変換

F#

こんなんでいいのかな? Double.tryParse使おうとおもったけど、綺麗な書き方が思いつかなかったので取り急ぎ。 > open System;; > let f x = - match x with - | "" -> 0.0 - | _ -> Double.Parse(x);; val f : x:string -> float > f "3.23";; val it : fl…

学習の記録ー13(クラスのインデントがわからん)

F#

頭出し F#でクラスを書くときにのインデントがよくわかってないので、以下に書くコードのMyFormクラスを適当に書き変えて コンパイル通る コンパイル通らない をメモっておきたい。 基本、=の後は改行+インデントしとけばいいという印象。ただclass...endの…

学習の記録ー12(コンピュテーション式、Computation Expressions)

F#

F Sharp Programming/Computation Expressions - Wikibooks, open books for an open world がすごい解り易かったので適当にメモりつつ、コード写経。話の流れとしては 普通の書き方⇒モナド前夜的な書き方⇒モナド(F#のコンピュテーション式)使った書き方⇒F#…

学習の記録−11

F#

F#コツコツ再開したい。 Visual Studio Express 2012 for web入れてF#ろうとしてた時に「fsi.exeがねぇよ! ヽ(`Д´)ノ 」と思ったら C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0にあった。リハビリ開始。こんなんいける(いけたんだっけぇ…

fslexとfsyaccを使って字句・構文解析して電卓っぽい計算をしてくれる奴を作成したい

F#

DSL(Domain Specific Language)作成のための第一歩としてよくある電卓的なものを作るぞと。ネットで見かける日本語の情報は不勉強な私の知識を超えている内容なので、ここでは丁寧にまとめておきたい。環境はVisual Studio 2010 Shell版のF#(Not 製品版のV…

R.NETとExcel-DNAでRで動くExcelアドインを作る

F# R C#

手元にあるVisual StudioがExpress版だと中々作るのが難しいExcelアドインですが、CodePlex Archiveというものを使うと驚くほど簡単にExcelアドインを.NET言語を使って作成できます。またさらに、.NET言語からR言語を呼び出すことを可能にするDLLを、我らが…

F#で数値・線形代数計算をするためのライブラリ紹介(F# PowerPack, F# MathProvider)

F#

に参戦中でして、その12月15日分の記事です。日本だと未だに「関数型って仕事じゃ使えない」的な話をよく目にしますが、外資系企業、特に私のいる金融業界だと既に関数型での開発が行われていて、F#の使用例としてはクレディスイスという外資系金融機関…

学習の記録−10

F#

今度は の本の内容を適当にメモ。 open System (* 複数行コメント *) [<EntryPoint>] let main(args : string[]) = ///斜線3つで書いたコメントはIDEの補完で表示される let greeting, thing = args.[0], args.[1] let timeOfDay = DateTime.Now.ToString("hh:mm tt") p</entrypoint>…

FizzBuzzなるものを書く

F#

よくTLで見る神々がやっていたので、つい。 matchに複数条件かませられるとか初めて知った・・・ let fizzBuzz x = match x%3 = 0, x%5 = 0 with |true, true -> "FizzBuzz" |true, false -> "Fizz" |false, true -> "Buzz" |_ -> string x ;; [1..30] |> Li…

いろんな言語で配列(リスト・ベクトル)の逆順を出す

#embedly_twitter_50281804{background:url(http://a0.twimg.com/profile_background_images/117348165/tw1.gif) #C0DEED; padding:20px;} #embedly_twitter_50281804 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;fo…

プロセッサ(CPU)の数を取得する

F#

適当に検索するといろいろ記事がひっかかるけど、古い上にwindows API叩いててとても嫌だったのでもうちょい調べてみると > System.Environment.ProcessorCount;; val it : int = 4 でOKだということがわかった。 これはF#じゃなくて、.NETの関数だったので…

async周りのメモ

F#

MSDN マガジンのバックナンバーがとてもよい入門になっている気がするので、メモ。簡単な束縛式 > let x = async{return 1};; val x : Async<int> を見てやると、xはAsyncで束縛されていることがわかる。これを使ってまた別な束縛を行おうとすると・・・ > let y </int>…

ビルダークラスの作り方・使い方

F#

実践F#を読んでもよくわからなかったのでサンプルをさらに簡単にした奴をメモ。 type OwnBuilder() = member x.Return(r) = printfn "Return (%A)" r r member x.Delay(f) = printfn "Delay (%A)" f fun () -> f() ;; let ownBuilder = new OwnBuilder();; l…

学習の記録−10

F#

アクティブパターン パターンとして使用できる関数を定義する機能。あくまで関数。 let (|Even|Odd|) n = if n % 2 = 0 then Even else Odd let evenOrOdd n = match n with | Even -> printfn "%d is Even" n | Odd -> printfn "%d is Odd" n > evenOrOdd 2…

学習の記録−9

F#

F#でのOOP(クラスの書き方)について プロパティの定義 まずはプロパティの書き方。慣れないと接頭辞のprt.*1が結構気持ち悪い感じ。以下のコードでは性別を判別共有体として作っておいて、それをメンバ変数(sex,F#ではそう呼ばない?)として持たせておく…

学習の記録−8

F#

配列の定義 リスト[]の代わりに[||]と書く。List.toArray関数を使えばリストから生成することも可能。 > let x = [|1..3|];; val x : int [] = [|1; 2; 3|] > List.toArray [1..3];; val it : int [] = [|1; 2; 3|] 配列のアクセス Listと違ってランダムアク…

学習の記録−7

F#

リスト F#でのリスト、以下のように書く。List.headで頭、List.tailで頭以外の要素を取得できる。 > let lst = 1::2::3::[];; val lst : int list = [1; 2; 3] > List.head lst;; val it : int = 1 > List.tail lst;; val it : int list = [2; 3] > let f ls…

学習の記録−6

F#

ファイルの内容を読んでリストにするには let contents = Array.toList(System.IO.File.ReadAllLines @"input.txt");; みたいに書く。内容を画面に出したい時は contents |> List.iter (printfn "%s");; contents |> List.iter (fun x -> printfn "%s" x);; …