基于范数约束向量的类型

Types that constrain vectors based on norm

在像 Haskell 或 Idris 这样的语言中,是否可以创建一种数据类型来检查函数的输入向量是否是单一的?也就是说,我可以创建一个数据类型 SumsToOne 来检查向量加起来是否等于 1 等吗?

是的。在 Idris 中,就像您所说的那样。您可以用元素总和为 one

的证明包装一个列表
data SumsToOne : Type where
  STO : (xs : List Int) -> {auto prf : sum xs = 1} -> SumsToOne

虽然如果按数据类型你指的是证明,而不是元素,你可以

go : (xs : List Int) -> {auto prf : sum xs = 1} -> <whatever you're returning>

证明的类型是sums xs = 1prf 只是函数参数名称,auto 表示 Idris 会尽可能为您找到证明。

我不知道这是否适用于浮点元素。