Symbolismライブラリは算術演算子をオーバーロードします。それはC#で書かれているが、私は、F#からそれを使用することができます。C#ライブラリは^演算子をオーバーロードします。代わりに**を使用する方法は?
open Symbolism
let x = new Symbol("x")
let y = new Symbol("y")
let z = new Symbol("z")
printfn "%A" (2*x + 3 + 4*x + 5*y + z + 8*y)
出力:
3 + 6 * x + 13 * y + z
しかし、それはまた、権力のため^
をオーバーロード。これはもちろん、F#ではうまくいきません。
回避策に向けたステップとして、私は権力のための方法グループをエクスポート:
printfn "%A" (Aux.Pow(x, 2) * x)
出力:
x^3
私が代わりにAux.Pow
メソッドグループを使用する**
をオーバーロードすることができますどのように?
私はこのような何か行うことができます。
let (**) (a: MathObject) (b: MathObject) = Aux.Pow(a, b)
をそして、それはMathObject
値のための作業を行います。
> x ** y * x;;
val it : MathObject = x^(1 + y)
しかしAux.Pow
が同様int
オーバーロードされます。
public static MathObject Pow(MathObject a, MathObject b)
{ return new Power(a, b).Simplify(); }
public static MathObject Pow(MathObject a, int b)
{ return a^new Integer(b); }
public static MathObject Pow(int a, MathObject b)
{ return new Integer(a)^b; }
どれでも提案は歓迎! (?< - ):
他のオペランドの型と同じ関数を宣言できませんか? –
こんにちは@JonSkeet。私はF#演算子(関数)がC#の方法のやり方をオーバーロードするとは思わない。それはあなたが意味することですか? – dharmatech