請問有人可以告訴我,抽象數據類型和代數數據類型有什麼區別?抽象數據類型和代數數據類型之間的區別
回答
代數數據類型是由和和產品(不同的構造函數和具有多個字段的構造函數)組成的類型。抽象數據類型是一種數據類型,它的實現被定義的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. ML抽象數據類型
- 6. [數據類型]和[數據類型[]]之間的差異
- 7. ActionScript - 「通配符」與對象數據類型之間的區別?
- 8. cl_datatype和通常數據類型之間的區別是什麼
- 9. VBA中Long和Object數據類型之間的區別
- 10. TypeScript:函數類型之間的區別
- 11. 參數類型之間的區別
- 12. 抽象類型與類型參數 - 區別在哪裏?
- 13. 數據結構 - 抽象數據類型(ADT)VS具體數據類型(CDT)
- 14. MustInherit和抽象類之間的區別
- 15. Haskell中的類型和數據類型有什麼區別?
- 16. 不同類型的Key Valye數據庫之間的區別
- 17. 在抽象類之間傳遞數據
- 18. 引用類型和對象類型之間的區別?
- 19. 指針數據類型之間的區別C
- 20. 相同數據類型的結構和數組之間的區別是什麼?
- 21. jquery中的數據和數據類型有什麼區別?
- 22. 抽象數據類型問題
- 23. 什麼是抽象數據類型(ADT)?
- 24. 排序抽象數據類型在Haskell
- 25. 春季數據REST - 抽象類型
- 26. SML:創建抽象數據類型
- 27. 類別數據類型
- 28. 用malloc分配數組類型和數組之間的區別
- 29. JavaScript自定義數據類型和對象之間有什麼區別?
- 30. 位掩碼的整數和位(n)數據類型之間是否有區別?
這是什麼意思,總和和產品? –
總和類型'S = T | U'是一個類型,其值集合是'T'和'U'類型值集合的總和(聯合)。產品類型「P = T×U」是一組值爲「T」和「U」值集合(笛卡爾積)的類型。最着名的產品類型是「Tuple」和「Record」。 –
元組爲什麼是一個產品類型? –