抽象データ型と代数データ型の違いは誰か教えてください。抽象データ型と代数データ型の違い
答えて
代数データ型は、合計と積(複数のフィールドを持つ異なるコンストラクタとコンストラクタ)で構成される型です。抽象データ型は、定義されたAPIによって抽象化されたその実装を持つデータ型です。通常、実装上のある種のカプセル化があります。
たとえば、優先度キューは抽象的なデータ型です。メモリ内では、配列として、またはヒープ上に割り当てられたセルとして、あるいはC言語の構造体やシェイクスピア・ソネットとして実装されます。ただし、プッシュとポップという明確に定義されたインターフェースで抽象化しています。アイテムをキューに優先的にプッシュすることができ、いつでも最優先のアイテムをポップできます。 もう1つの例は、ハッシュ、バイナリ検索ツリー、または十分に訓練された海老で実装できる関連マップまたは辞書です。重要な点は、基礎となる実装を抽象化するルックアップ、挿入、および削除操作を定義することです。
彼らは本当に基本的に異なることについて話します。一部のデータ構造は、実際には代数データ型として実装された抽象データ型と見ることができます。 []代数データ型として実装されているPreludeのcommom linked list抽象データ型と同じです。それが提供するインターフェイスはconsingとunconsingですが、複数のコンストラクタとして複数のフィールドを持つコンストラクタとして実装されています。
抽象型と代数データ型を指していると仮定します。 Scalaのほとんどの人は、sum typesについてADT(代数データ型)を参照しています。 [製品タイプ]も代数データ型です。 Scalaでは
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]
抽象タイプ達成するために、形質/抽象クラスで未定義タイプの別名をさせることで定義することができます非常に単純な例では、ツリーは、(あなたが実際にあなたの前の質問のいずれかでそれを定義した)であります詳細な表現。この質問はすでに回答済みですhere。
抽象型は、通常、コンポーネントの内部構造に関する情報を隠すために使用されるため、基本的には、特定のコンポーネントの具体的な型を抽象化するために使用されます。代数的データ型が定義するだけの形態であるが最後に、抽象型は、(この場合)はScalaの型システムの機能のより多くのです
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 = ???
}
:抽象型を使用したツリー表現を書き換えしようとするようなものを提供します複合型であり、プログラミング言語から独立しています。
合計タイプ*と*製品タイプ。 – pedrofurla
@pedrofurlaありがとうございました、私は答えを更新しました:)私は、ADTについて話すときにScalaを使用しているほとんどの人が考えるものを説明しようとしたからです。しかし、他のものも列挙するのは意味があります。 –
あなたは間違っています。 – pedrofurla
- 1. ツリー抽象データ型
- 2. ジェネリックストリームと抽象データ型のここ
- 3. データ構造 - 抽象データ型(ADT)VS具体的データ型(CDT)
- 4. 代数データ型の型レベルセット
- 5. 単純な抽象データ型のリンクリストに
- 6. SML:抽象データ型を作成する
- 7. タイプクラスと代数データ型
- 8. ハスケルの抽象データ型とは何ですか?それらは代数データ型とどう違うのですか?
- 9. Haskellの代数的データ型
- 10. Scalaのコンテナ代数データ型
- 11. 代数データ型のパターンマッチング
- 12. 抽象型との型の不一致
- 13. ルビの手続き型とデータ抽象化
- 14. スカラクラスのコンストラクタと抽象型
- 15. プロトタイプ抽象データ型とは何ですか?
- 16. 純抽象データ型をリターンとして使用するか?
- 17. JavaScriptは抽象データ型をサポートしていますか?
- 18. スカラ、抽象的な抽象型の型にアクセスする
- 19. SQLiteの "Text"データ型と "String"データ型の相違
- 20. C++データ型とC#データ型
- 21. C#データ型とMySqlデータ型
- 22. 抽象コレクションのデータ型を定義する方法は?
- 23. 抽象データ型のパラメータを持つ方法は?
- 24. 実際にはPythonの抽象データ型は何ですか?
- 25. ラスカルの代数データ型の継承?
- 26. ハスケルの代数的データ型: "pseudo-extend"
- 27. 大規模代数データ型のメモリフットプリント
- 28. 代数データ型の理解が困難
- 29. Haskellの型とデータ型の違いは何ですか?
- 30. MySQLのBLOBデータ型とTEXTデータ型の違いは何ですか?
合計と商品とはどういう意味ですか? –
合計型 'S = T | U'は、値セットが 'T'型と' U'型の値の集合の和(和集合)である型です。製品タイプ「P = T×U」は、その値のセットが「T」および「U」の値のセットの(デカルト)積であるタイプである。最もよく知られている製品タイプは 'Tuple'と' Record'です。 –
タプルはなぜ製品タイプですか? –