iterableとenumerableに違いはありますか?


16

多くの言語には、反復可能または列挙可能と呼ばれる非常に類似した構造があるようです。これらは反復または列挙できる構造であり、非常に似ているように思えます。これらの単語は同義語ですか、用語の選択を正当化するiterableとenumerableの間に微妙な意味の違いがありますか?


1
男自身、Jon Skeetは、C#がIterableの代わりにEnumerableを使用したことを本の中で嘆いています。その決定は、この種の混乱の多くをもたらしました。
ラバーダック

回答:


13

私見これはコンテキストに依存し、時には同義語であり、時にはそうではありません。たとえば、C#には、イテレータを分類するデータ型 "IEnumerable"がありますが、反復ではなくシンボリック定数用の "enum"宣言もあります。他のプログラミング言語(または他のコンテキスト)では、状況は同様である場合とそうでない場合があります。

プログラミング言語のキーワードとしてではなく、英語の動詞としての2つの単語を意味する場合、

  • 反復とは、「セットのすべての要素を1つずつループする」ことを意味します
  • 列挙とは、「セットの各要素に序数を1つずつ与える」ことを意味します。

また、列挙には反復が必要であり、列挙は何らかの反復を意味するため、通常、これら2つのプロセス記述は交換できます。


3
+1列挙型に言及するのはなぜですか?構造体としての列挙型は、列挙可能性に固有のものでしょうか?列挙型の性質は、「セット内の各定数に順序番号を1つずつ与える」と言うことができると思いますが... :)
Marjan Venema

@MarjanVenema:さて、キーワード「enum」はenumに由来します。
ドックブラウン

ああ、そうだね。私は鶏と卵を間違った方法で手に入れました:
マージャンヴェネマ

3
@DocBrown-enumは列挙の略です。
リー

3
@リー:それは修辞的な質問でした;-)
Doc Brown

4

他の人が言ったように、正確なセマンティクスは用語を使用するプログラミング言語に依存するため、純粋に言語学的な評価を行います。

「Iterable」は、多くの言語に組み込まれている「反復」と「反復子」を明らかに指す、かなり新しく作られた単語です。したがって、そのような型はほぼ確実に反復子をサポートします。最も基本的なイテレータ機能:すべてのアイテムを1回処理します。距離の反転、削除、測定などはサポートされる場合とされない場合があります。

「列挙可能」とは、物事を列挙することを指します。これ、言語がその目的のために「反復可能」をまだ使用していない場合にのみ、反復と同じことを意味します。言語に両方がある場合、「列挙可能」とはほぼ確実に他の何か、おそらくより強力な何かを意味します。ほとんどの場合、各要素を一意の数値インデックスで接続するという概念をサポートし、おそらくランダムアクセスを許可します(たとえば、1番目と2番目の要素の前に3番目の要素を取得します)。

それは言葉だけから合理的に推論できるすべての意味についてです。具体的な状況では、標準ライブラリAPIドキュメントを参照してください。


1

両方の用語の厳密な定義に焦点を当てたい

Iterable 物事を反復し、要素に1つずつアクセスすることです。

この用語Enumerableはターニングマシンに由来すると思います。適切な順序で要素を1つずつリストする機能についてです。物事は一つずつリストアップすることができcountable、それぞれに一意の通信インデックスがあります。要素を指定すると、一意のインデックスを取得できます。インデックスを指定すると、そのインデックスに関連付けられた1つの可能な要素のみを見つけることができます。

つまり、Enumerableは、要素を生成する能力を意味します。たとえば、いくつかのプログラミング言語Haskellがこのアイデアを実装しています。Enum型のクラスがありChar、インスタンスの1つです。

Prelude> fromEnum True
1
Prelude> fromEnum False
0
Prelude> toEnum 1 :: Bool
True

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"

-1

列挙はカウントであり、反復はリプレイです

2番目の列挙は同じ数を生成します。反復はバリエーションである場合があります

フラクタルは、関数の反復によって構築され、最後の反復の結果で関数を繰り返し、各反復は異なる値を持ちます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.