range
시작값(포함)부터 끝값(미포함)까지 원하는 간격으로 나아가는 정수의 지연 시퀀스입니다.
강의
range는 sync* 제너레이터를 사용해 필요할 때마다
정수를 만들어 냅니다 — 미리 할당해 두는 것은 없습니다. 인자를 하나만 주면
range(4)는 0, 1, 2, 3을 세고(즉 0부터
start 직전까지), 두 개를 주면 range(1, 4)는
1, 2, 3을 셉니다. 세 번째 인자는 간격을 정하는데,
음수 간격을 주면 거꾸로 셀 수도 있습니다. 예를 들어
range(4, 1, -1)은 4, 3, 2를 냅니다.
지연 평가되기 때문에 range(1000000)을 만드는 비용은 사실상
없습니다 — 백만 개의 정수는 하류(보통 .take(n))에서 실제로
끌어당길 때만 생성됩니다. 그래서 range는 지연 평가를 보여 줄 때
가장 먼저 꺼내 드는 소스이며, 실제 컬렉션을 먼저 만들지 않고도 "앞의 N개"가
필요할 때 쓰기 좋은 대체 수단입니다.
FxTS의 range도 숫자에 대한 유한 제너레이터인데, 이 포팅 역시
같은 계약을 유지합니다 — 여기에는 무한 형태가 없습니다(그건
cycle의 몫입니다). 끝없이 이어지는 카운터가 필요하다면
range를 cycle, take와 함께 쓰세요.
데모 1 · 올라가기, 내려가기, 간격 두고 세기
데모 2 · 체인 속의 지연 평가
range(1000000)은 미리 아무것도 만들지 않습니다 —
take(4)가 요구하는 원소 4개만 실제로
map을 거칩니다:
직접 해 보기
연습: range의 간격 인자를 써서 2부터 10까지(10 포함)의
짝수를 만들어 보세요.