3

私は StrangeLights の宣伝文を読み、Expert F# (page 119) からの一節を読みましたが、それらが私のコードにどのように適用されるかわかりません:

私のテストでは、少しの許容範囲で、float 間の同等性をチェックしたいと考えています。すべてを測定単位に変換していますが、「一般的」になりたいです。

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

次に、これを使用して、さまざまな「タイプ」のフロートで同等性をチェックしたり、カリー化してカスタムのものを作成したりできます。

toleqm = toleq 1.0e-10<m>

しかし、次のメッセージが表示されます。

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

関数にするためにこれ以上できることがわかりません-暗黙のパラメーターが表示されません。

調子はどう?

4

1 に答える 1

2

まあ、私は必死になって少しいじり、解決策を見つけましたが、その理由を理解しているかどうかはわかりません...

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

うーん、C# のジェネリック宣言と同じくらい醜いです。

于 2009-01-06T13:31:50.410 に答える