我有一个函数来计算序列的累积和。
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
虽然它看起来很通用,但整数0
使它成为非泛型的,因此我无法用浮点序列调用该函数。
是否存在可以替换我的硬编码0
的通用零,或者可能是使函数通用的不同方式。
答案 0 :(得分:9)
你可以使用GenericZero原语,但是你需要使你的函数内联并使它明确地成为一个函数(现在你的函数是用point-free style编写的)因为原则上不能内联值。
let inline cumsum s =
s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray
请注意,通过删除Type参数'T
,编译器会自动推断静态成员约束:
val inline cumsum :
s:seq< ^a> -> ^b []
when ( ^b or ^a) : (static member ( + ) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)
答案 1 :(得分:1)
LanguagePrimitives.GenericZero
:)