C'è una differenza tra iterabile ed enumerabile?

15

Molte lingue sembrano avere strutture molto simili chiamate iterabili o enumerabili. Queste sono strutture che possono essere ripetute o enumerate, che mi sembrano cose estremamente simili. Sono queste parole sinonimi o c'è una sottile differenza semantica tra iterabile ed enumerabile che giustifica la scelta del termine?

    
posta AlexC 09.11.2013 - 14:32
fonte

4 risposte

12

IMHO questo dipende dal contesto, a volte sono sinonimi, a volte non lo sono. Ad esempio, in C # si ha un tipo di dati "IEnumerable", che classifica gli iteratori, ma si ha anche la dichiarazione "enum" che è per le costanti simboliche, non in modo specifico per le iterazioni. In altri linguaggi di programmazione (o in altri contesti) la situazione potrebbe essere simile o no.

Se intendi le due parole solo come verbi inglesi e non specificatamente come parole chiave della lingua di programmazione, allora

  • iterare significa "scorrere su tutti gli elementi di un set, uno per uno"
  • enumerare significa "dare ad ogni elemento di un insieme un numero ordinale, uno per uno"

E dal momento che l'iterazione è necessaria per l'enumerazione e l'enumerazione implica un qualche tipo di iterazione, queste due descrizioni di processo possono essere normalmente scambiate.

    
risposta data 09.11.2013 - 17:26
fonte
4

Come altri hanno già detto, la semantica precisa dipende dal linguaggio di programmazione che usa i termini, quindi darò una valutazione puramente linguistica.

"Iterable" è una parola coniata di recente, che si riferisce ovviamente a "iterating" e agli "iterators" che molte lingue hanno incorporato. Di conseguenza, tali tipi quasi certamente supportano un iteratore, ma non necessariamente qualcos'altro, e non necessariamente tutto ciò che va oltre la funzionalità di base dell'iteratore: elaborare ogni oggetto una sola volta. L'inversione, l'eliminazione, la misurazione delle distanze ecc. Possono o non possono essere supportate.

"Enumerable" si riferisce a enumerare le cose, che può significare lo stesso di iterare, ma solo se la lingua non usa già "iterable" a tale scopo. Se una lingua ha entrambi, "enumerabile" significa quasi certamente qualcos'altro, probabilmente qualcosa di più potente. Molto probabilmente, supporterà la nozione di connettere ciascun elemento con un indice numerico univoco e probabilmente consentirà l'accesso casuale (ad esempio il recupero del terzo elemento prima del primo e del secondo).

Questo è tutto il significato che puoi ragionevolmente dedurre solo dalle parole. In qualsiasi situazione concreta, fare riferimento ai documenti API standard della libreria.

    
risposta data 09.11.2013 - 17:53
fonte
1

Voglio concentrarmi sulla definizione rigorosa di entrambi i termini

Iterable serve per iterare le cose e ottenere l'accesso all'elemento uno per uno.

Penso che il termine Enumerable sia stato originato dal tornio. Si tratta della possibilità di elencare l'elemento uno per uno in un ordine corretto. Le cose possono essere elencate una per una deve essere countable , ognuna ha un indice di corrispondenza unico. Dato un elemento, puoi ottenere un indice univoco. Dato un indice, puoi trovare solo un possibile elemento associato a tale indice.

In altre parole, Enumerable implica la possibilità di generare gli elementi. Alcuni linguaggi di programmazione, ad esempio Haskell , hanno implementato questa idea. Esiste una classe Enum e Char è uno l'istanza.

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

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"
    
risposta data 08.06.2016 - 17:50
fonte
-1

il conteggio sta contando, l'iterazione è una riproduzione

una seconda enumerazione produrrà lo stesso numero, un'iterazione può essere una variante

i frattali sono costruiti mediante iterazioni di una funzione, ripetendo la funzione sul risultato dell'ultima iterazione, ogni iterazione ha un valore diverso

    
risposta data 09.11.2013 - 20:41
fonte

Leggi altre domande sui tag