F# 中的运算符重载/支持有区别的联合
Operator overloading / support discriminated unions in F#
我有一个可区分的联合(标记值),它应该代表多项式的次数
type Degree =
|MinusInf
|Fin of int
所以我有一个函数可以给出多项式的次数
>deg [1;2;3;4];;
val it : Degree = Fin 3
现在,我的问题是,我怎样才能创建一个允许我添加度数的函数,以便:
Fin 2 + Fin 3 = Fin 5
一切顺利
MSDN 上有一篇相当详细的文章。简而言之,您想在 Degree
类型上定义这样的函数:
type Degree =
|MinusInf
|Fin of int
static member (+) (a: Degree, b: Degree) : Degree =
match a, b with
| Fin x, Fin y -> Fin (x+y)
| _, _ -> MinusInf
let x = Fin 2 + Fin 3
我有一个可区分的联合(标记值),它应该代表多项式的次数
type Degree =
|MinusInf
|Fin of int
所以我有一个函数可以给出多项式的次数
>deg [1;2;3;4];;
val it : Degree = Fin 3
现在,我的问题是,我怎样才能创建一个允许我添加度数的函数,以便:
Fin 2 + Fin 3 = Fin 5
一切顺利
MSDN 上有一篇相当详细的文章。简而言之,您想在 Degree
类型上定义这样的函数:
type Degree =
|MinusInf
|Fin of int
static member (+) (a: Degree, b: Degree) : Degree =
match a, b with
| Fin x, Fin y -> Fin (x+y)
| _, _ -> MinusInf
let x = Fin 2 + Fin 3