Wydaje się, że wiele języków ma bardzo podobne struktury zwane iterowalnymi lub policzalnymi. Są to struktury, które można powtarzać lub wyliczać, które wydają mi się bardzo podobne. Czy te słowa są synonimami, czy też istnieje subtelna semantyczna różnica między iterowalnym a policzalnym, która uzasadnia wybór terminu?
16
Odpowiedzi:
IMHO zależy to od kontekstu, czasem są one synonimami, a czasem nie. Na przykład w języku C # masz typ danych „IEnumerable”, który klasyfikuje iteratory, ale masz także deklarację „enum”, która dotyczy stałych symbolicznych, a nie iteracji. W innych językach programowania (lub innych kontekstach) sytuacja może być podobna lub nie.
Jeśli masz na myśli te dwa słowa tak, jak angielskie czasowniki, a nie słowa kluczowe w języku programowania, to
A ponieważ iteracja jest potrzebna do wyliczenia, a wyliczenie implikuje pewien rodzaj iteracji, te dwa opisy procesów można zazwyczaj zamieniać.
źródło
Jak powiedzieli inni, dokładna semantyka zależy od języka programowania, który używa tych terminów, dlatego dokonam oceny czysto językowej.
„Iterable” to dość nowe słowo, oczywiście odnoszące się do „iteracji” i „iteratorów” wbudowanych w wiele języków. Dlatego tego typu prawie na pewno obsługują iterator, ale niekoniecznie nic innego, a niekoniecznie nic poza tym najbardziej podstawowa funkcjonalność iteratora: przetwarzanie każdego elementu raz. Cofanie, usuwanie, mierzenie odległości itp. Może być obsługiwane lub nie.
„Wyliczalny” odnosi się do wyliczania rzeczy, co może oznaczać to samo co iteracja, ale tylko wtedy, gdy język nie używa jeszcze „iterowalnego” w tym celu. Jeśli język ma jedno i drugie, „wyliczalny” prawie na pewno oznacza coś innego, prawdopodobnie coś potężniejszego. Najprawdopodobniej będzie on obsługiwał koncepcję łączenia każdego elementu unikalnym indeksem liczbowym i zapewne umożliwi losowy dostęp (np. Pobieranie trzeciego elementu przed pierwszym i drugim).
To prawie całe znaczenie, jakie można rozsądnie wywnioskować z samych słów. W każdej konkretnej sytuacji zapoznaj się ze standardowymi dokumentami API biblioteki.
źródło
Chcę skupić się na ścisłej definicji obu terminów
Iterable
polega na iteracji i uzyskiwaniu dostępu do elementu jeden po drugim.Myślę, że termin
Enumerable
ten pochodzi od tokarki. Chodzi o możliwość wyszczególnienia elementu jeden po drugim w odpowiedniej kolejności. Rzeczy mogą być wymienione kolejnocountable
, każda z nich ma unikalny indeks korespondencji. Biorąc pod uwagę element, możesz uzyskać unikalny indeks. Biorąc pod uwagę indeks, można znaleźć tylko jeden możliwy element związany z tym indeksem.Innymi słowy,
Enumerable
implikuje zdolność do generowania elementów. Na przykład niektóre języki programowaniaHaskell
wdrożyły ten pomysł. Istnieje klasa typu Enum iChar
jest ona instancją.źródło
wyliczanie się liczy, iteracja jest powtórką
drugie wyliczenie da tę samą liczbę, iteracja może być odmianą
fraktale są budowane przez iteracje funkcji, powtarzając funkcję na wyniku ostatniej iteracji, każda iteracja ma inną wartość
źródło