5
我有一個函數來計算一個序列的累計和。通用函數的通用零點
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
雖然它看起來一般,整數0
使得非通用,因此我不能叫浮筒序列中的功能。
是否有一個通用的零可以替代我的硬編碼0
,或者可能是一種通用的功能的不同方式。
我有一個函數來計算一個序列的累計和。通用函數的通用零點
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
雖然它看起來一般,整數0
使得非通用,因此我不能叫浮筒序列中的功能。
是否有一個通用的零可以替代我的硬編碼0
,或者可能是一種通用的功能的不同方式。
可以使用GenericZero原始的,但你需要讓你的內聯函數,使之明確的功能(現在你的函數寫在point-free style)因爲原則值不能進行一致。
let inline cumsum s =
s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray
。注意,通過去除所述類型參數'T
靜態成員約束由編譯器自動推斷出:
val inline cumsum :
s:seq< ^a> -> ^b []
when (^b or ^a) : (static member (+) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)
LanguagePrimitives.GenericZero
:)
注意,'cumsum'必須按順序進行的內聯函數,而不是一個值,以具有預期的效果,即'let inline cumsum x = x |> Seq.scan(+)LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray'。 – ildjarn 2015-01-21 10:01:07
甚至沒有直到檢查reddit! :) – kasperhj 2015-01-21 10:02:02
@ildjarn這是爲什麼? – kasperhj 2015-01-21 10:04:13