Existe diferença entre iterável e enumerável?

15

Muitas linguagens parecem ter estruturas muito semelhantes, chamadas de iteráveis ou enumeráveis. Estas são estruturas que podem ser iteradas ou enumeradas, que me parecem coisas extremamente semelhantes. Estas palavras são sinônimas ou existe uma sutil diferença semântica entre iterável e enumerável que justifique a escolha do termo?

    
por AlexC 09.11.2013 / 14:32
fonte

4 respostas

12

IMHO isso depende do contexto, às vezes eles são sinônimos, às vezes eles não são. Por exemplo, em C # você tem um tipo de dados "IEnumerable", que classifica os iteradores, mas você também tem a declaração "enum" que é para constantes simbólicas, não especificamente para iterações. Em outras linguagens de programação (ou outros contextos), a situação pode ser semelhante ou não.

Se você quer dizer as duas palavras como verbos em inglês e não especificamente como palavras-chave da linguagem de programação,

  • iterar significa "repetir todos os elementos de um conjunto, um por um"
  • enumerando significa "dar a cada elemento de um conjunto um número ordinal, um por um"

Como a iteração é necessária para enumerar e enumerar implica algum tipo de iteração, essas duas descrições de processo podem ser geralmente intercambiadas.

    
por 09.11.2013 / 17:26
fonte
4

Como outros já disseram, a semântica precisa depende da linguagem de programação que usa os termos, então eu darei uma avaliação puramente lingüística.

"Iterable" é uma palavra bastante nova, obviamente referindo-se a "iterar" e os "iteradores" que muitas linguagens construíram. Portanto, tais tipos quase certamente suportam um iterador, mas não necessariamente qualquer outra coisa, e não necessariamente qualquer coisa além da funcionalidade mais básica do iterador: processar cada item uma vez. Reversão, exclusão, medição de distâncias, etc. podem ou não ser suportados.

"Enumerable" refere-se a enumerar coisas, o que pode significar o mesmo que iterar, mas somente se a linguagem ainda não usar "iterável" para esse propósito. Se uma linguagem tem ambos, "enumerável" quase certamente significa outra coisa, provavelmente algo mais poderoso. Muito provavelmente, ele suportará a noção de conectar cada elemento com um índice numérico exclusivo e, provavelmente, permitirá acesso aleatório (por exemplo, recuperar o terceiro elemento antes do primeiro e do segundo).

Isso é sobre todo o significado que você pode inferir com base apenas nas palavras. Em qualquer situação concreta, consulte os documentos da API da biblioteca padrão.

    
por 09.11.2013 / 17:53
fonte
1

Eu quero focar na definição estrita dos dois termos

Iterable é para iterar coisas e obter acesso ao elemento um por um.

Acho que o termo Enumerable foi originado da máquina de giro. É sobre a capacidade de listar o elemento um por um na ordem correta. As coisas podem ser listadas uma a uma, tem que ser countable , cada uma tem um índice de correspondência único. Dado um elemento, você pode obter um índice exclusivo. Dado um índice, você só pode encontrar um elemento possível associado a esse índice.

Em outras palavras, Enumerable implica na capacidade de gerar os elementos. Algumas linguagens de programação, por exemplo, Haskell implementaram essa ideia. Existe uma classe de tipo Enum e Char is um o exemplo.

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

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

a enumeração está contando a iteração é uma repetição

uma segunda enumeração produzirá o mesmo número, uma iteração pode ser uma variação

os fractais são construídos por iterações de uma função, repetindo a função no resultado da última iteração, cada iteração tem um valor diferente

    
por 09.11.2013 / 20:41
fonte