티스토리 뷰

아래의 글은 E.W.Dijkstra글 'Why numbering should start at zero' 를 번역(의역)한 글 입니다.

자연수 2,3, ..., 12 나타내기 위해서는 다음과 같이 4가지 표현방식을 사용할 있습니다

a) 2 ≤ i < 13 

b) 1 < i ≤ 12 

c) 2 ≤ i ≤ 12 

d) 1 < i < 13

4가지 방식중 과연 어느 것이 낫다고 말할 있을까요?  정답은 '말할 있다' 입니다.  a) b) 방식을 보면, 범위를 나타내기 위해 쓰여진 숫자들의 차이가 바로 수열의 길이 임을 있습니다.  (a: 13 - 2 = 11, b: 12 - 1 = 11)  또한 방식에서는 '수열이 인접하다' 라는 말을 수열의 상한과 수열의 하한이 같다 라고 표현 있습니다.  (2 ≤ j < 4, 4 ≤ k < 6  j k j 상한과 k 하한이 같기 때문에(4) j, k 인접하다고 있습니다.)  그럼 a) b) 중에 어느 것이 나은 방식일까요? 이번에는 다른 관점에서 살펴보겠습니다

자연수 가장 작은 값을 생각해 보세요(1). b) d) 같이 하한을 배제하는 방식(<)으로 자연수 가장 작은 값을  표현해 봅시다. 그럼 하한값은 자연수 범위에 벗어나는 것을 있습니다. (a < 1 : a 자연수가 없다.) 이건 아름답지 못한 방식이기 때문에 a) c) 같은 하한을 포함하는 방식(≤) 선호합니다.  이번에는 가장 작은 자연수로 이루어진 수열을 생각해 보세요. 만일 이 수열이 공집합이 될 때 까지 작아지면, 상한을 포함하는 방식 (≤) 자연스럽지 않다는 것을 있습니다.  (2 ≤ n ≤ 1 같이 되어야 공집합을 표현할 수 있다.) 이것은 아름답지 못한 방식이기 때문에 a)와 d) 같은 상한을 배제하는 방식(<)을 더 선호합니다. 따라서 위와 같은 이유로 a) 방식이 제일 선호됩니다.

(비고) 제록스 PARC에서 개발된 Mesa와 같은 프로그래밍 언어는 정수의 범위의 표현을 위한 모든 4가지 표현방식들(a, b, c, d)에 대한 특별한 표기법이 있었습니다. Mesa의 이런 다양한 표현방식을 쓰면서, 다른 3가지 표현방식들을 사용하는 것은 많은 어색함과 실수들이 있었고, 따라서 Mesa의 프로그래머들은 이 나머지 3가지 방식을 사용하지 말 것을 강력하게 주장하였습니다. 제가 이 경험담을 소개한 이유는 - 그럴 만한 가치가 있기도 하고 - 어떤 사람들은 실전에서 확인되지 않은 결론을 접하는 것을 불편해 하기 때문입니다. (비고 끝)

*                        *

*

만일 N 의 길이를 가지고 있는 수열을 다루고, 우리가 이 수열의 원소들을 서브스크립트로 (for 문같은) 로 구별하고 싶을 때, 다음으로 제기되는 귀찮은 문제는 바로 첫 시작 원소를 어떤 것으로 정해야 할지 입니다. a)의 방법을 사용한다고 했을 때, 이 서브스크립트가 1로 시작한다고 하면, 서브스크립트의 범위가 1 ≤ i < N+1 이 됩니다. 만일 0부터 시작한다고 하면, 좀 더 깔끔한 범위인 0 ≤ i < N 이 됩니다. 따라서 우리는 수열을 0부터 시작한다고 놓읍시다 : 수열에서 원소의 서수가 (서브스크립트) 원소의 길이하고 같게 됩니다 (N). 이 이야기의 교훈으로 우리는 가장 자연수 다운 수인 0을 - 몇백년이 지난 후에도 - 생각했다는 것을 알 수 있을것입니다.

(비고) 많은 프로그래밍 언어들이 이런 디테일에 관심을 갖지 않고 디자인 되었습니다. FORTRAN 에서는 서브스크립트들은 언제나 1로 시작합니다. ALGOL 60과 PASCAL 에서는 c) 방법이 채택되었습니다. 최신 SASL 같은 경우도 FORTRAN의 방법과 같이 후퇴하였습니다. SASL의 수열은 양의 정수의 함수와 같습니다. 참 안타깝군요! (비고 끝)

*                          *

*

위와 같은 내용은 최근의 감정적 폭발이 기폭장치가 되어 작성되었습니다. 제 대학교 동료중 수학을 다루는 한명이 - 컴퓨터 과학자는 아닙니다 - 다수의 어린 컴퓨터 과학자들을 학자라고 뽑내고 다닌다고 비난했기 때문입니다. 왜냐하면 - 그들은 버릇처럼 - 숫자를 0에서 부터 세기 시작했기 때문입니다. 그는 이 현명한 방식을 일부러 분개하며 받아들였습니다. (또한 “…의 끝” 이라고 쓰는 방식 또한 분개하며 보았는데; 사실 이 방식은 효율적입니다: 저는 문제의 질문이 첫 페이지의 마지막 부분에서 끝난다는 무언의 가정을 한 시험을 친 학생이 거의 떨어질뻔 하는 것을 보았습니다.) 저는 “종교단체에서 이단자는 쫓겨날 수 밖에없다. 그 자가 틀렸다는 확률 때문이 아니라 그 자가 맞았을 확률 때문이다.”라고한 Antony Jay의 말이 맞았다고 생각합니다.


'컴퓨터' 카테고리의 다른 글

Unicode - UCS-2, UTF-16, UTF-8, UTF-32  (1) 2016.11.10
ASCII 와 ANSI encoding  (0) 2016.11.09
[컴퓨터개론] 2의 보수  (1) 2016.11.04
[컴퓨터개론] 정수의 덧셈과 뺄셈  (0) 2016.11.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함