Gibt es einen Unterschied zwischen iterabel und aufzählbar?

16

Viele Sprachen scheinen sehr ähnliche Strukturen zu haben, die als iterabel oder aufzählbar bezeichnet werden. Dies sind Strukturen, über die iteriert oder aufgezählt werden kann und die mir äußerst ähnlich erscheinen. Sind diese Wörter synonym oder gibt es einen subtilen semantischen Unterschied zwischen iterierbar und aufzählbar, der die Wahl des Begriffs rechtfertigt?

AlexC
quelle
1
Der Mann selbst, Jon Skeet, beklagt in seinem Buch, dass C # mit Enumerable statt mit Iterable ging. Diese Entscheidung hat zu viel Verwirrung geführt.
RubberDuck

Antworten:

13

IMHO hängt das vom Kontext ab, manchmal sind sie auch, manchmal sind sie nicht. In C # haben Sie beispielsweise den Datentyp "IEnumerable", der Iteratoren klassifiziert, aber Sie haben auch die "enum" -Deklaration, die für symbolische Konstanten und nicht spezifisch für Iterationen gilt. In anderen Programmiersprachen (oder anderen Kontexten) kann die Situation ähnlich sein oder nicht.

Wenn Sie die beiden Wörter nur als englische Verben und nicht speziell als Schlüsselwörter für die Programmiersprache meinen, dann

  • Iterieren bedeutet, "alle Elemente einer Menge einzeln durchlaufen"
  • Aufzählungsmittel, um "jedem Element eines Satzes eine Ordnungszahl zu geben, eine nach der anderen"

Und da die Iteration zum Aufzählen erforderlich ist und das Aufzählen eine Art von Iteration impliziert, können diese beiden Prozessbeschreibungen normalerweise ausgetauscht werden.

Doc Brown
quelle
3
+1 warum nennst du aber enums? Die Enumeration als Struktur wäre orthogonal zur Enumarierbarkeit? Obwohl ich vermute, dass man sagen könnte, dass die Art einer Aufzählung darin besteht, "jeder Konstante in einer Menge eine Ordnungszahl nach der anderen zu geben" ... :)
Marjan Venema
@MarjanVenema: Das Schlüsselwort "enum" stammt wohl von enumerate .
Doc Brown
Oh ja, das würde ich sagen. Ich habe mein Huhn und Ei falsch herum bekommen :-)
Marjan Venema
3
@DocBrown - Aufzählung ist die Abkürzung für Aufzählung.
Lee
3
@Lee: das war eine rhetorische Frage ;-)
Doc Brown
4

Wie andere bereits gesagt haben, hängt die genaue Semantik von der Programmiersprache ab, in der die Begriffe verwendet werden. Ich werde daher eine rein sprachliche Einschätzung vornehmen.

"Iterable" ist ein ziemlich neu geprägtes Wort und bezieht sich offensichtlich auf "Iterating" und die "Iteratoren", die viele Sprachen eingebaut haben. Daher unterstützen solche Typen mit ziemlicher Sicherheit einen Iterator, aber nicht notwendigerweise irgendetwas anderes und nicht notwendigerweise irgendetwas darüber hinaus Die grundlegendste Iterator-Funktionalität: Verarbeitung jedes Elements einmal. Das Umkehren, Löschen, Messen von Entfernungen usw. wird möglicherweise unterstützt oder nicht.

"Aufzählbar" bezieht sich auf das Aufzählen von Dingen, was dasselbe wie das Iterieren bedeuten kann , jedoch nur, wenn die Sprache für diesen Zweck nicht bereits "Aufzählbar" verwendet. Wenn eine Sprache beides hat, bedeutet "zählbar" mit ziemlicher Sicherheit etwas anderes, wahrscheinlich etwas Mächtigeres. Höchstwahrscheinlich wird es den Gedanken unterstützen, jedes Element mit einem eindeutigen numerischen Index zu verbinden, und wahrscheinlich wird es den wahlfreien Zugriff ermöglichen (z. B. das dritte Element vor dem ersten und zweiten Element abzurufen).

Das ist ungefähr die ganze Bedeutung, die Sie vernünftigerweise nur aus den Wörtern schließen können. In allen konkreten Situationen beziehen Sie sich auf die API-Dokumente der Standardbibliothek.

Kilian Foth
quelle
1

Ich möchte mich auf die strikte Definition beider Begriffe konzentrieren

Iterable ist, Dinge zu iterieren und nacheinander auf das Element zuzugreifen.

Ich denke, dass der Begriff Enumerablevon der Drehmaschine stammt. Es geht um die Möglichkeit, das Element einzeln in der richtigen Reihenfolge aufzulisten. Die Dinge können einzeln aufgelistet werden countable, jeder hat einen eindeutigen Korrespondenzindex. Bei einem gegebenen Element können Sie einen eindeutigen Index erhalten. Bei einem gegebenen Index können Sie nur ein mögliches Element finden, das diesem Index zugeordnet ist.

Mit anderen Worten, Enumerableimpliziert die Fähigkeit, die Elemente zu generieren. Einige Programmiersprachen zum Beispiel Haskellhaben diese Idee umgesetzt. Es gibt eine Enum- Typklasse und Chareine Instanz.

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

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"
user1022209
quelle
-1

Aufzählung zählt, Iteration ist eine Wiederholung

eine zweite Aufzählung ergibt die gleiche Zahl, eine Iteration kann eine Variation sein

Fraktale werden durch Iterationen einer Funktion gebildet, wobei die Funktion auf dem Ergebnis der letzten Iteration wiederholt wird. Jede Iteration hat einen anderen Wert

user108306
quelle