統計モデルの場合、測定単位を一貫して使用したい場合は、持っているデータの数をどこかにエンコードする必要があります。
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> = ...
しかし、サイズの異なる不明な数のデータセットをマージできるようにしたいと考えています。そのような関数を定義するにはどうすればよいですか?
シーケンスは 1 種類しかないため、単純な方法は失敗するため、サイズを静的に定義する必要があります。
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
または、特定のルールを追加するだけで、データのサイズを気にする必要はありません。これは、アプリカティブ コードにカスタム ディメンション管理を追加することを意味しますが、これも汚いです..そして、そもそもクリーンなディメンションを持つという点を台無しにします!