1

我有以下程序:

open System
open MathNet.Numerics
open MathNet.Numerics.LinearAlgebra

//entropy
let entropy v  =
    let pct = v / v.Sum()
    let l1 = pct.Map (fun x -> System.Math.Log(x, 2.0))
    let p = Vector.map2 (fun x y -> x * y) pct l1
    let e = - p.Sum()
    e

[<EntryPoint>]
let main argv = 

    let v1 = vector [ 1.0 ; 3.0 ; 5.0 ]
    let e1 = entropy v1

    0 // return an integer exit code

我需要为熵函数中的变量 v 提供类型注释。如您所见,我传递给函数 (v1) 的参数定义为 MathNet.Numerics.LinearAlgebra.vector。我已经尝试了很多类型注释的选项,但都没有成功。

应该是什么?如果您能帮助我了解您是如何得出答案的,则可以加分。

4

1 回答 1

3

这个向量类型是通用的;泛型参数指示向量的每个分量的类型。类型注释必须至少指出通用参数的数量,例如Vector<_>对于任何此类向量,或者Vector<float>对于问题中使用的确切类型。

换句话说,Vector<_>Vector是与编译器无关的类型。注释应该用一个而不是零泛型参数来表示 Vector 类型。

我希望“粗略”的注释(v : Vector<_>)就足够了;然后,编译器将在函数稍后使用浮点数(值 2.0)推断通用参数。不过我不使用该库,所以我没有对此进行测试。

于 2014-11-19T17:31:32.217 回答