moonmile solutions 分室

ソフトウェア開発者の情報収集をリアルタイムで垂れ流し...という具合に行きます。

2014-01-01から1年間の記事一覧

F# で 'a(ジェネリック/総称)を型推論して束縛する離れ業がある

おなじく pars.fs を覗いてみて分かったのだけど、 let op (x:int) = let (y:'a) = 20 let (z:'a) = "masuda" x + y の場合には、"masuda" で bind するときにコンパイルエラーになる。 一見、'a は unit のように見えるけど、x+y の時点で op 関数の引数 x …

F#でラムダ式を配列に入れる離れ業がある

pars.fs を解析しているときに気づいたのだが、 let funcs = [| (fun x -> x + 2); (fun x -> x * 2); (fun x -> x / 2) |] ってことができる。ラムダ式を配列にするのだけど、こういうことができる。 > funcs.[1] 10 ;; val it : int = 20 あらかじめ、引数…

本格的に F# の二項演算子(中置記法)を導入してみる(3)

ちなみに、pars.fs 自体は、以下のように定義されている。 declExpr: | defnBindings IN typedSeqExpr %prec expr_let { mkLocalBindings (unionRanges (rhs2 parseState 1 2) $3.Range,$1,$3) } ... | declExpr JOIN_IN declExpr { SynExpr.JoinIn($1,rhs p…

本格的に F# の二項演算子(中置記法)を導入してみる(2)

D:\git\fsharp\src\utils\prim-parsing.fs の 115行目あたりに #if DEBUG module Flags = let mutable debug = true #endif があるので debug = true にしておくと、pars.fs の解析途中が見られる。 0 value(state), state 4:op x y ;; keyword:"op" keyword…

本格的に F# の二項演算子(中置記法)を導入してみる(1)

Scala のメソッドの扱いが、func x y と x func y が同じなのは、二項演算子に文字列を使えるのではなくて「中置記法(infix notation)」とのこと。C# や F# でも (+) を op_plus に置き換えているのだが、一方向にしかできない。Scala の場合は、双方向に…

INotifyPropertyChangedとDependencyProperties

WPFで依存プロパティを作るときに DependencyProperties を使って、ViewModel のときに INotifyPropertyChanged を使っていたのだが、どちらも同じ機能だから、どっちかを使えばよいらしい。INotifyPropertyChanged はリフレクションを使っているので若干遅…

Visual Studio 2013 のプロジェクト GUID

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Projects に一覧がある。 [HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Projects\{6bc8ed88-2882-458c-8e55-dfd12b67127b}]@="MonoTouchProjectFactory""DisplayName"="…

オレオレF#のインテリセンス機能

記号を使えるとしても、VS2013 で使えないと意味がないので、ファイル編集のインテリセンスと、F# Interactive をオレオレF#に切り替える必要がある...が、どうするのか? FSharp.Comiler.dll だけ切り替えるとできるかな?

オレオレF#

数学の記号を op_char に入れたけど、letter から外してやれば、他の変数とかと競合しないで済むのではないか? in lex.fsl let letter = '\Lu' | '\Ll' | '\Lt' | '\Lm' | '\Lo' | '\Nl'let surrogateChar = '\Cs'let digit = '\Nd'let hex = ['0'-'9'] | […