请问有人可以告诉我,抽象数据类型和代数数据类型有什么区别?抽象数据类型和代数数据类型之间的区别
回答
代数数据类型是由和和产品(不同的构造函数和具有多个字段的构造函数)组成的类型。抽象数据类型是一种数据类型,它的实现被定义的API抽象出来......通常在其实现上进行某种封装。
例如,优先级队列是一种抽象数据类型。在内存中,它可能被实现为一个数组,或者堆中的分配单元,或者C中的结构,或者作为莎士比亚的十四行诗。但是,您可以通过定义良好的界面对其进行抽象:push和pop。您可以优先将物品推入队列,并且可以随时弹出最高优先级的物品。 另一个例子是关联映射或字典,它可以用哈希,二叉搜索树或训练有素的海獭来实现。重要的是您定义了查找,插入和删除操作,这些操作对基础实现进行抽象。
所以他们真的谈论根本不同的事情。一些数据结构实际上可以看作是作为代数数据类型实现的抽象数据类型!就像Prelude中的commom链接列表抽象数据类型一样,它被实现为[]代数数据类型。它提供的接口是consing和unconsing,但它实现为多个构造函数,其中一个具有多个字段 - 和和产品。
我假设你指的是抽象类型和代数数据类型。 Scala中的大多数人参考了sum types的ADT(代数数据类型)。 [产品类型]也是代数数据类型。一个很简单的例子是树(你实际上是在你前面的问题一个定义的话):
sealed abstract class Tree[+A]
case object Leaf extends Tree[Nothing]
case class Branch[A](left: Tree[A], right: Tree[A], value: A) extends Tree[A]
抽象类型在Scala中可以通过让在特质/抽象类未定义一个类型别名实现定义一个粒度表示。这个问题已经回答了here。
抽象类型通常用于隐藏有关组件内部结构的信息,因此基本上抽象出某个组件的具体类型。试图重写使用抽象类树表示给出了类似:
sealed trait Tree {
type A
}
case object Leaf extends Tree {
override type A = Nothing
}
case class Branch(left: Tree, right: Tree) {
// This doesn't really make sense, we don't want to hide A!
override type A = ???
}
最后,抽象的种类较多,Scala的类型系统的功能(在这种情况下),同时代数数据类型仅仅是定义的形式复合类型并且独立于编程语言。
总和类型*和*产品类型。 – pedrofurla
@pedrofurla谢谢,我已经更新了答案:)我省略了这一点,只是因为我试图说明在讨论ADT时使用Scala思考什么_most人。尽管列举其他人也是有道理的。 –
你在这一点上是错的。 – pedrofurla
- 1. 数据/类型构造函数和函数之间的区别?
- 2. 类型和类之间的数据存储区别
- 3. 抽象数据类型
- 4. [数据类型]和[数据类型[]]之间的差异
- 5. ActionScript - “通配符”与对象数据类型之间的区别?
- 6. cl_datatype和通常数据类型之间的区别是什么
- 7. 数据结构 - 抽象数据类型(ADT)VS具体数据类型(CDT)
- 8. MustInherit和抽象类之间的区别
- 9. 不同类型的Key Valye数据库之间的区别
- 10. 在抽象类之间传递数据
- 11. 指针数据类型之间的区别C
- 12. 相同数据类型的结构和数组之间的区别是什么?
- 13. 排序抽象数据类型在Haskell
- 14. SML:创建抽象数据类型
- 15. 抽象数据类型问题
- 16. 位掩码的整数和位(n)数据类型之间是否有区别?
- 17. Haskell中的列表:数据类型还是抽象数据类型?
- 18. 如何理解ADT(抽象数据类型代数)?
- 19. 数据类型* <变量名称>与数据类型* <变量名称>之间的区别
- 20. java中的数据抽象和程序抽象之间的区别
- 21. 抽象类型与类型参数
- 22. 高效的Python数据存储(抽象数据类型?)
- 23. 输入类型和参数类型之间的差别
- 24. 具有零参数的抽象类和没有参数的抽象类之间有什么区别?
- 25. 什么是Haskell中的一些抽象数据类型,它们与代数数据类型有什么不同?
- 26. 超类和超类型之间的区别以及子类和子类型之间的区别
- 27. java中的基本数字数据类型的助手类和包装类之间的区别
- 28. 转换数据类型之间的C#
- 29. 类似的括号化函数类型之间的区别
- 30. Kotlin中的列表和数组类型之间的区别
这是什么意思,总和和产品? –
总和类型'S = T | U'是一个类型,其值集合是'T'和'U'类型值集合的总和(联合)。产品类型“P = T×U”是一组值为“T”和“U”值集合(笛卡尔积)的类型。最着名的产品类型是“Tuple”和“Record”。 –
元组为什么是一个产品类型? –