3

この単純な関数:

let sum a b = a + b

int 型でのみ機能します

float と long でも機能するようにするにはどうすればよいですか?

4

2 に答える 2

8

インラインを使用:

let inline sum a b = a + b

アップデート:

独自の多相数値関数を作成することに関心がある場合は、インラインモジュールとLanguagePrimitivesモジュールの両方を使用する必要があります。

これはスレッドConverting Haskell Polymorphic Cosine function to F#からの多形コサイン関数です:

let inline cosine n (x: ^a) = 
    let one: ^a = LanguagePrimitives.GenericOne
    Seq.initInfinite(fun i -> LanguagePrimitives.DivideByInt (- x*x) ((2*i+1)*(2*i+2)))
    |> Seq.scan (*) one
    |> Seq.take n
    |> Seq.sum
于 2012-04-17T13:45:23.637 に答える
3

あなたが与えるサンプル関数は、型推論のためにint型に対してのみ機能します。型推論メカニズムは、加算を確認するため、自動的にintを推論します。floatとlongで同じ関数を作成する場合は、Padが言ったようにインラインで実行するか、次のようにします。

let sumFloat (a:float) b = a + b

let sumLong (a:int64) b = a + b

ただし、インラインは、探している一般的な「加算をサポートする任意のタイプ」の動作を取得するための適切なメカニズムです。

于 2012-04-17T13:58:53.553 に答える