本格的に F# の二項演算子(中置記法)を導入してみる(1)
Scala のメソッドの扱いが、func x y と x func y が同じなのは、二項演算子に文字列を使えるのではなくて「中置記法(infix notation)」とのこと。C# や F# でも (+) を op_plus に置き換えているのだが、一方向にしかできない。Scala の場合は、双方向に変換できるので等価性がある、ってことだろう。
現状の F# では、
let (+++) x y = x + y
のときに
x +++ y は可能
(+++) x y はできない。
let plus x y = x + y
のときに
plus x y は可能
x plus y はできない
となっている。これを両方可能にすれば ok. そうすると関数/メソッドも中置記法になるので「見かけ上、二項演算子のように見える」ことになる。
実際には Scala の infix notation は obj.method param の書き方を obj method param で書けるということなので、
member this.op x = this + x の時は
obj.op x と書くところを
obj op x と書けることになる。
よって、先の global な +++ と区別が必要なので、
member this.op x = ... の場合には
obj op x と書く
static member this.op x y = ... の場合は(こんな書き方ができたかは後で)
x class.op y と書く
グローバルなところで
let op x y = ... と書いたら
x op y と書ける
の実装が必要になる。
これが他の F# の文法を阻害しないかどうかはもう少し検討が必要。