¿Hay alguna diferencia entre iterable y enumerable?

15

Muchos idiomas parecen tener estructuras que son muy similares, llamadas iterables o enumerables. Estas son estructuras que pueden ser iteradas o enumeradas, que me parecen cosas extremadamente similares. ¿Son estas palabras sinónimos o hay una diferencia semántica sutil entre iterable y enumerable que justifica la elección del término?

    
pregunta AlexC 09.11.2013 - 14:32
fuente

4 respuestas

12

En mi humilde opinión esto depende del contexto, algunas veces son sinónimos, otras veces no. Por ejemplo, en C # tiene un tipo de datos "IEnumerable", que clasifica los iteradores, pero también tiene la declaración "enum" que es para las constantes simbólicas, no específicamente para las iteraciones. En otros lenguajes de programación (u otros contextos) la situación puede ser similar o no.

Si te refieres a las dos palabras al igual que los verbos en inglés y no específicamente como palabras clave del lenguaje de programación, entonces

  • iterar significa "recorrer todos los elementos de un conjunto, uno por uno"
  • enumerar significa "dar a cada elemento de un conjunto un número ordinal, uno por uno"

Y como la iteración es necesaria para enumerar, y enumerar implica algún tipo de iteración, esas dos descripciones de procesos pueden intercambiarse.

    
respondido por el Doc Brown 09.11.2013 - 17:26
fuente
4

Como han dicho otros, la semántica precisa depende del lenguaje de programación que usa los términos, así que daré una evaluación puramente lingüística.

"Iterable" es una palabra de nueva acuñación, obviamente que se refiere a "iterating" y a los "iteradores" que muchos idiomas han incorporado. necesariamente algo más allá de la funcionalidad de iterador más básica: procesar cada elemento una vez Invertir, eliminar, medir distancias, etc. puede o no ser compatible.

"Enumerable" se refiere a enumerar cosas, que puede significa lo mismo que iterar, pero solo si el idioma no usa "iterable" para ese propósito. Si un lenguaje tiene ambos, "enumerable" casi seguramente significa algo más, probablemente algo más poderoso. Lo más probable es que admita la idea de conectar cada elemento con un índice numérico único, y probablemente permita el acceso aleatorio (por ejemplo, recuperar el tercer elemento antes que el primero y el segundo).

Eso es todo el significado que puedes inferir razonablemente de solo las palabras. En cualquier situación concreta, consulte los documentos API de la biblioteca estándar.

    
respondido por el Kilian Foth 09.11.2013 - 17:53
fuente
1

Quiero centrarme en la definición estricta de ambos términos

Iterable es iterar cosas y obtener acceso al elemento uno por uno.

Creo que el término Enumerable se originó en la máquina de tornear. Se trata de la capacidad de enumerar el elemento uno por uno en el orden correcto. Las cosas que se pueden enumerar una por una deben ser countable , cada una tiene un índice de correspondencia único. Dado un elemento, puede obtener un índice único. Dado un índice, solo puede encontrar un elemento posible asociado con ese índice.

En otras palabras, Enumerable implica la capacidad de generar los elementos. Algunos lenguajes de programación, por ejemplo, Haskell ha implementado esta idea. Hay una clase de tipo Enum , y Char es uno la instancia

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

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"
    
respondido por el user1022209 08.06.2016 - 17:50
fuente
-1

la enumeración está contando, la iteración es una repetición

una segunda enumeración dará el mismo número, una iteración puede ser una variación

Los fractales

se construyen por iteraciones de una función, repitiendo la función en el resultado de la última iteración, Cada iteración tiene un valor diferente

    
respondido por el user108306 09.11.2013 - 20:41
fuente

Lea otras preguntas en las etiquetas