iterable과 enumerable 사이에 차이가 있습니까?


16

많은 언어에는 반복 가능 또는 열거 가능이라는 매우 유사한 구조가있는 것 같습니다. 이것들은 반복되거나 열거 될 수있는 구조입니다. 이 단어들이 동의어입니까, 반복 가능한 용어와 열거 가능한 용어 사이에 미묘한 의미 차이가있어 용어의 선택을 정당화합니까?


1
존 스케이트 (John Jon Skeet)는 C #이 Iterable 대신 Enumerable과 함께 갔다고 자신의 책에 애도한다. 그 결정은 많은 종류의 혼란을 초래했습니다.
RubberDuck

답변:


13

IMHO 이것은 상황에 따라 다르며 때로는 동의어이며 때로는 그렇지 않습니다. 예를 들어, C #에는 반복자를 분류하는 "IEnumerable"데이터 유형이 있지만 반복적으로 구체적이 아닌 기호 상수에 대한 "enum"선언도 있습니다. 다른 프로그래밍 언어 (또는 다른 상황)에서 상황은 비슷하거나 다를 수 있습니다.

프로그래밍 언어 키워드가 아닌 영어 동사로 두 단어를 의미한다면,

  • 반복이란 "세트의 모든 요소를 ​​하나씩 반복"하는 것을 의미합니다.
  • "집합의 각 요소에 서수를 하나씩 부여하는"열거 수단

그리고 열거를 위해 반복이 필요하고 열거는 어떤 종류의 반복을 의미하므로,이 두 프로세스 설명은 일반적으로 교환 될 수 있습니다.


3
+1 왜 열거 형을 언급합니까? 구조로서의 열거 형은 열거성에 직교 적입니까? 비록 당신이 enum의 본질이 "일정한 수의 서수를 하나씩 부여하는 것"이라고 말할 수있을 것입니다 ... :)
Marjan Venema

@MarjanVenema : 글쎄, 키워드 "enum"은 enum 에서 나옵니다 .
Doc Brown

D' oh, ya, 그렇게 말할 것입니다. 내 닭고기와 계란 길을 잘못 라운드 :-) 도착
마르 얀 Venema의

3
@DocBrown-열거 형은 열거 형의 줄임말입니다.
Lee

3
@Lee : 그것은 수사적인 질문이었다 ;-)
Doc Brown

4

다른 사람들이 말했듯이, 정확한 의미론은 용어를 사용하는 프로그래밍 언어에 달려 있으므로 순전히 언어 평가를하겠습니다.

"반복 가능"은 많은 언어가 내장 한 "반복"과 "반복자"를 분명히 언급하는 다소 새로운 언어입니다. 따라서 이러한 유형은 거의 확실히 반복자를 지원하지만 반드시 다른 것을 의미하지는 않습니다. 가장 기본적인 반복자 기능 : 모든 항목을 한 번 처리합니다. 역전, 삭제, 거리 측정 등이 지원되거나 지원되지 않을 수 있습니다.

"Enumerable"은 항목을 열거하는 것으로, 반복과 같은 의미 일 있지만 언어에서 해당 목적에 대해 "iterable"을 사용하지 않는 경우에만 가능합니다. 언어에 "열거 가능"이라는 용어가 모두 있다면, 아마도 더 강력한 무언가를 의미 할 것입니다. 대부분의 경우, 각 요소를 고유 한 숫자 색인으로 연결한다는 개념을 지원하며 임의 액세스를 허용 할 수 있습니다 (예 : 첫 번째 및 두 번째 요소 이전에 세 번째 요소 검색).

그것은 단지 단어들로부터 합리적으로 추론 할 수있는 모든 의미에 관한 것입니다. 구체적인 상황에서는 표준 라이브러리 API 문서를 참조하십시오.


1

두 용어의 엄격한 정의에 집중하고 싶습니다

Iterable 일을 반복하고 요소에 하나씩 액세스하는 것입니다.

이 용어 Enumerable는 터닝 머신에서 유래 한 것으로 생각 됩니다. 적절한 순서로 요소를 하나씩 나열하는 기능에 관한 것입니다. 사물은 하나씩 나열 될 수 있으며 countable각각 고유 한 대응 색인을 갖습니다. 요소가 주어지면 고유 인덱스를 얻을 수 있습니다. 인덱스가 주어지면 해당 인덱스와 관련된 가능한 요소는 하나만 찾을 수 있습니다.

즉, Enumerable요소를 생성하는 기능을 의미합니다. 예를 들어 일부 프로그래밍 언어 Haskell는이 아이디어를 구현했습니다. 거기에있다 열거 형 클래스, 그리고 Char하나의 인스턴스입니다.

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

Prelude> fromEnum 'a'
97
Prelude> enumFromTo 'a' (toEnum 122 :: Char)
"abcdefghijklmnopqrstuvwxyz"

-1

열거가 계산되고 반복이 재생 중입니다.

두 번째 열거는 같은 수를 산출하며, 반복은 변형 일 수 있습니다.

프랙탈은 함수의 반복에 의해 만들어지고 마지막 반복의 결과에서 함수를 반복하며 각 반복은 다른 값을 갖습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.