F#的度量单位和统计模型

时间:2012-07-04 13:17:28

标签: f# units-of-measurement

对于统计模型,如果我想要一致地使用度量单位,我需要在某处编码我拥有的数据。

type DataSet<[<Measure>] 'x, [<Measure>] 'y, [<Measure>] 'n>  = 
        DataSet of Matrixu<'n,'x> * Vectoru<'n,'y>

然后我可以定义一个合并2个数据集的函数

static member (+) (a:DataSet<'x,'y,'n1>,b:DataSet<'x,'y,'n2>):DataSet<'x,'y,n>  = ...

但我希望能够合并不同数量的unknonw数据集。 我该如何定义这样的函数?

天真的方法失败了,因为一个序列只有一种,所以我需要静态定义大小。

    static member merge (ar:DataSet<'x,'y, ??? > seq) : DataSet<'x,'y, 'n>  = 
        if seq.empty, etc...
        let   head = ar |> Seq.head
        let others = ar |> Seq.skip 1
        others |> Seq.fold (fun st el -> st + el) head

或者我应该只添加特定的规则而不是处理数据的大小。 这意味着在应用程序代码中添加自定义维度管理,这也是很脏的......并且首先要清除维度,这是一种破坏点!

1 个答案:

答案 0 :(得分:1)

我认为您正在扩展计量单位的使用范围。根据我的经验,他们非常适合物理学和类似的(金融,我猜),但就是这样。我不相信他们可以处理静态容器的大小(例如n-by-m矩阵)。

您是否听说过依赖类型系统和F*?我见过固定大小列表的例子,表明它可能适合这项工作。它仍然是微软的一个研究项目,可能不适合商业用途。