F#

学習の記録−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…

学習の記録−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