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; }
Любые предложения приветствуются!
Можете ли вы не объявлять одни и те же функции с другими типами операндов? –
Hi @JonSkeet. Я не думаю, что F # -операторы (функции) перегружают метод C#. Это ты имел в виду? – dharmatech