Symbolismライブラリは、算術演算子をオーバーロードします。C# で書かれていますが、F# から使用できます。
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# ではうまく機能しません。
回避策として、powers のメソッド グループをエクスポートしました。
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; }
どんな提案でも大歓迎です!