【问题标题】:What is this abstract data type called?这种抽象数据类型叫什么?
【发布时间】:2010-10-18 17:45:26
【问题描述】:

我正在编写 Haskell,但这可以应用于任何具有 ADT 概念的 OO 或函数式语言。我将在 Haskell 中给出模板,忽略算术运算符已被采用的事实:

class Thing a where
   (+) :: a -> a -> a
   (-) :: a -> a -> a
   x - y = x + negate y
   (*) :: (RealFrac b) => a -> b -> a
   negate :: a -> a
   negate x = x * (-1)

基本上这些是可以加减的东西,也可以乘以实小数。一个例子可能是一个简单的数字列表:加法和减法是成对的(在 Haskell 中,“(+) = zipWith (+)”),乘以一个实数将列表中的每个项目乘以相同的数量。我遇到了足够多的其他示例,想将其定义为一个类,但我不知道该叫什么。

在 Haskell 中,只要有某种零值,它通常是一个幺半群。

这是代数类型动物园中某种已知的对象吗?我查看了环、半环、近半环、组等,但没有找到。

【问题讨论】:

  • 我建议完全避免使用 ADT 这个术语,它可以像 OO 语言一样用于“代数数据类型”或“抽象数据类型”。由于这种模棱两可,我有点想念这个问题。

标签: haskell abstract-data-type


【解决方案1】:

这是一个向量空间:http://en.wikipedia.org/wiki/Vector_space。你有加法和标量乘法。

【讨论】:

  • 另外,如果 Haskell 是您正在编写的语言(并且您不介意使用语言扩展),Hackage 上有一个不错的库,称为“vector-space”,它已经有一个类这个。
  • 谢谢。这就是我想要的。感谢 mokus 指点我的包裹。
  • hackage.haskell.org/package/numeric-prelude中有很好的代数结构层次结构
  • 是的,我浏览了 Numeric Prelude。然后我看着标准前奏曲,直到我的头停止旋转。尽管我发现标准的 Prelude 受到限制,尤其是在尝试定义“instance Num VectorSpace”之类的东西时,我仍然更喜欢它而不是 Numeric Prelude 的百科全书式复杂性。
猜你喜欢
  • 2013-03-25
  • 2018-02-19
  • 2016-12-10
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多