왜 번호 매김은 0부터 시작해야 하는가 (EWD 831)

ko생성일: 2025. 10. 10.

자연수 구간 표기 관례를 검토하고, 수열의 첨자를 0에서 시작해야 하는 논거를 제시하며, 프로그래밍 언어의 사례와 실제 경험을 통해 0 기반 번호 매김의 합리성을 옹호한다.

왜 번호 매김은 0부터 시작해야 하는가

자연수 2, 3, …, 12의 부분수열을 성가신 줄임표 없이 표기하려면, 다음 네 가지 관례가 가능하다

a) 2 ≤ i < 13 b) 1 < i ≤ 12 c) 2 ≤ i ≤ 12 d) 1 < i < 13

하나를 다른 것보다 선호해야 할 이유가 있을까? 있다. 관례 a)와 b)에서는 언급된 경계의 차이가 부분수열의 길이와 같다는 장점이 있다는 관찰은 타당하다. 그 결과로, 이들 관례에서 두 부분수열이 인접한다는 것은 하나의 상한이 다른 하나의 하한과 같음을 뜻한다는 관찰도 타당하다. 이러한 관찰들이 타당하기는 하지만, 그것만으로는 a)와 b) 사이에서 선택할 수 있게 해주지 못한다. 그러니 처음부터 다시 시작하자.

자연수에는 가장 작은 수가 있다. 하한을 배제하는 표기—b), d)와 같은—는 가장 작은 자연수에서 시작하는 부분수열의 경우, 언급된 하한을 비자연수의 영역으로 몰아넣게 된다. 그것은 보기 흉하므로, 하한에는 a), c)처럼 ≤를 쓰는 것이 더 낫다. 이제 가장 작은 자연수에서 시작하는 부분수열들을 생각해 보자. 상한을 포함하면, 수열이 빈 수열로 줄어들었을 때 그 상한이 비자연수가 되도록 강제하게 된다. 그것도 보기 흉하므로, 상한에는 a), d)처럼 <를 쓰는 것이 더 낫다. 결론적으로 관례 a)를 선호해야 한다.

주석 프로그래밍 언어 Mesa는 Xerox PARC에서 개발되었는데, 정수 구간을 위 네 가지 관례 모두로 표기할 수 있는 특수 표기법들을 제공한다. Mesa를 충분히 사용해 본 경험에 따르면, 나머지 세 관례의 사용은 줄곧 어색함과 실수의 근원이 되어 왔고, 그 경험에 비추어 지금은 Mesa 프로그래머들에게 그 세 가지 기능을 사용하지 말라고 강하게 권고된다. 실무에서 확인되지 않은 결론에 불편해하는 사람들이 있기 때문에—가치야 어떻든—이 실험적 증거를 언급해 둔다. (주석 끝)

**

길이가 _N_인 수열을 다루면서 원소들을 아래첨자로 구별하려 할 때, 다음으로 성가신 질문은 시작 원소에 어떤 첨자 값을 부여할 것인가이다. 관례 a)를 고수하면서 첨자를 1에서 시작하면 첨자 범위가 1 ≤ i < N+1이 된다. 반면 0에서 시작하면 더 보기 좋은 범위 0 ≤ i < _N_을 얻게 된다. 그러므로 우리의 서수(첨자)는 0에서 시작하도록 하자. 어떤 원소의 서수(첨자)는 그 수열에서 그 원소에 앞서는 원소들의 개수와 같다. 그리고 이야기의 교훈은—수세기가 지난 끝에야!— 0을 가장 자연스러운 수로 간주하는 편이 낫다는 것이다.

주석 많은 프로그래밍 언어들이 이 세부 사항에 충분한 주의를 기울이지 않은 채 설계되었다. FORTRAN에서는 첨자가 항상 1에서 시작한다. ALGOL 60과 PASCAL에서는 관례 c)가 채택되었다. 더 최근의 SASL은 FORTRAN의 관례로 되돌아갔다. SASL에서 수열은 동시에 양의 정수에 대한 함수이기 때문이다. 안타깝다! (주석 끝)

**

위의 글은 최근의 한 사건에서 촉발되었다. 대학에서 수학을 하는 내 동료 한 사람이—컴퓨터 과학자는 아니다—감정적인 격앙 속에서, 젊은 컴퓨터 과학자들 몇 명이 습관대로 0부터 번호를 매긴다고 해서 그들을 “현학적”이라고 비난했기 때문이다. 그에게는 가장 합리적인 관례를 의식적으로 채택하는 행위가 도발로 비쳤던 것이다. (“End of …” 관례 또한 도발적으로 여겨진다. 그러나 그 관례는 유용하다. 첫 페이지 맨 아랫부분에서 문제가 끝났다고 묵시적으로 가정했다가 시험에서 거의 낙제할 뻔한 학생을 나는 알고 있다.) Antony Jay가 다음과 같이 말한 것이 옳다고 나는 생각한다. “기업 종교든 다른 종교든, 이단자는 그가 틀렸을 개연성 때문이 아니라 그가 옳을 가능성 때문에 추방되어야 한다.”

Plataanstraat 5

5671 AL NUENEN

네덜란드 1982년 8월 11일

prof.dr. Edsger W. Dijkstra

Burroughs 연구 펠로


전사: Kevin Hely.

최종 수정: 2008년 5월 2일(금).