3

この 2 つの概念の関係を把握しようとしています。

まず、 Abstract Data Typeの例を考えてみましょう:

data Tree a = Nil 
            | Node { left  :: Tree a,
                     value :: a,
                     right :: Tree a }

Haskell wikiによると:

この型は、データ型のユーザーによって提供される構造のいくつかの側面を未定義のままにするため、抽象的です。これは抽象データ型の弱い形式です。ソース

ここで、パラメトリック ポリモーフィズムの概念を考えてみましょう。

パラメトリック ポリモーフィズムとは、値の型に 1 つ以上の (制約のない) 型変数が含まれている場合を指します。そのため、値は、それらの変数を具象型に置き換えた結果の任意の型を採用できます。--ソース

以下に例を示しid :: a -> aます。

たとえば、関数id :: a -> aの型に制約のない型変数 a が含まれている

質問:これら 2 つの概念の正式な関係は何ですか? 特に、抽象データ型のすべてのインスタンスは、パラメトリック ポリモーフィズムのインスタンスでもありますか? 逆はどうですか?

4

2 に答える 2

1

意識することは2つ。まず、あなたの例Treeは実際にはパラメトリック型であり、これは特別な種類の抽象型です。第 2 に、パラメトリック ポリモーフィズムは型または関数にすることができます。これらの両方を念頭に置くと、抽象型もパラメトリック ポリモーフィズムも他方のスーパーセットではないことは明らかです。ただし、型であるパラメトリック ポリモーフィズムは抽象型でもあります。言い換えれば、抽象型パラメトリックにポリモーフィックな型のスーパーセットです (実際にそう呼ばれているかどうかはわかりません)。

于 2016-04-30T00:01:18.513 に答える
-2

その理由は、実装方法Treeに関する詳細が指定されていないため、抽象データ型です。ツリーにどのように値を追加しますか? どのように値を削除しますか? 型はツリーの構造のみを定義します。型は空であるか、型の値と他の 2 つのツリーへの参照を格納するノードです。a

パラメトリック ポリモーフィズムは、型の構造やダイナミクスとは何の関係もありません。代わりに、関連する型のファミリを実際に定義したという事実を指します。Tree Int、または 、Tree Charまたは のいずれであってTree (StateT (Int, Char) (MaybeT Float IO ()))も、実装は同じままです。

于 2016-04-30T00:27:13.350 に答える