moonmile solutions 分室

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

2014-05-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 はリフレクションを使っているので若干遅…