对于统计模型,如果我想要一致地使用度量单位,我需要在某处编码我拥有的数据。
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
或者我应该只添加特定的规则而不是处理数据的大小。 这意味着在应用程序代码中添加自定义维度管理,这也是很脏的......并且首先要清除维度,这是一种破坏点!
答案 0 :(得分:1)
我认为您正在扩展计量单位的使用范围。根据我的经验,他们非常适合物理学和类似的(金融,我猜),但就是这样。我不相信他们可以处理静态容器的大小(例如n-by-m矩阵)。
您是否听说过依赖类型系统和F*?我见过固定大小列表的例子,表明它可能适合这项工作。它仍然是微软的一个研究项目,可能不适合商业用途。