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?
16
Antworten:
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
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.
quelle
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.
quelle
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
Enumerable
von der Drehmaschine stammt. Es geht um die Möglichkeit, das Element einzeln in der richtigen Reihenfolge aufzulisten. Die Dinge können einzeln aufgelistet werdencountable
, 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,
Enumerable
impliziert die Fähigkeit, die Elemente zu generieren. Einige Programmiersprachen zum BeispielHaskell
haben diese Idee umgesetzt. Es gibt eine Enum- Typklasse undChar
eine Instanz.quelle
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
quelle