1

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

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>  = ...

但我希望能够合并未知数量的不同大小的数据集。如何定义这样的功能?

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

    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

或者我应该只添加特定的规则而不考虑数据的大小。这意味着在应用程序代码中添加自定义维度管理,这也很脏......并且首先破坏了拥有干净维度的点!

4

1 回答 1

1

我认为您正在扩展计量单位的使用范围。根据我的经验,它们在物理学和类似领域(我猜是金融)非常有用,但仅此而已。我不相信他们可以处理静态容器的大小(例如 n×m 矩阵)。

你听说过依赖类型系统和F*吗?我已经看到带有固定大小列表的示例,表明它可能适合这项工作。它仍然是微软的一个研究项目,可能不适合商业用途。

于 2012-07-04T21:55:39.613 回答