首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么序号要从0开始

为什么序号要从0开始

作者头像
SeanCheney
发布2019-03-04 10:38:46
9370
发布2019-03-04 10:38:46
举报
文章被收录于专栏:SeanCheney的专栏SeanCheney的专栏

语言设计中很有意思的一个小细节,《流畅的Python》里讲了这篇迪科斯彻的小文章。

《Why numbering should start at zero》,原文链接: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

艾兹格·迪科斯彻

To denote the subsequence of natural numbers 2, 3, ..., 12 without the pernicious three dots, four conventions are open to us:

(四种序列的标记方式)

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

Are there reasons to prefer one convention to the other? Yes, there are. The observation that conventions a) and b) have the advantage that the difference between the bounds as mentioned equals the length of the subsequence is valid. So is the observation that, as a consequence, in either convention two subsequences are adjacent means that the upper bound of the one equals the lower bound of the other. Valid as these observations are, they don't enable us to choose between a) and b); so let us start afresh.

(不能包含开头的数不美观;因为开头被包含了,下一个子序列也是有开头的,所以结尾不应被包含)

There is a smallest natural number. Exclusion of the lower bound —as in b) and d)— forces for a subsequence starting at the smallest natural number the lower bound as mentioned into the realm of the unnatural numbers. That is ugly, so for the lower bound we prefer the ≤ as in a) and c). Consider now the subsequences starting at the smallest natural number: inclusion of the upper bound would then force the latter to be unnatural by the time the sequence has shrunk to the empty one. That is ugly, so for the upper bound we prefer < as in a) and d). We conclude that convention a) is to be preferred.

(Mesa这门语言采用了abcd四种标记方式,bcd三种方法总是引发错误)

The programming language Mesa, developed at Xerox PARC, has special notations for intervals of integers in all four conventions. Extensive experience with Mesa has shown that the use of the other three conventions has been a constant source of clumsiness and mistakes, and on account of that experience Mesa programmers are now strongly advised not to use the latter three available features. I mention this experimental evidence —for what it is worth— because some people feel uncomfortable with conclusions that have not been confirmed in practice. (End of Remark.)

(如果序号是1开始的话,完整的序列是1 ≤ i < N+1;换成0开始的话,则是0 ≤ i < N,后者更好)

When dealing with a sequence of length N, the elements of which we wish to distinguish by subscript, the next vexing question is what subscript value to assign to its starting element. Adhering to convention a) yields, when starting with subscript 1, the subscript range 1 ≤ i < N+1; starting with 0, however, gives the nicer range 0 ≤ i < N. So let us let our ordinals start at zero: an element's ordinal (subscript) equals the number of elements preceding it in the sequence. And the moral of the story is that we had better regard —after all those centuries!— zero as a most natural number.

Many programming languages have been designed without due attention to this detail. In FORTRAN subscripts always start at 1; in ALGOL 60 and in PASCAL, convention c) has been adopted; the more recent SASL has fallen back on the FORTRAN convention: a sequence in SASL is at the same time a function on the positive integers. Pity! (End of Remark.)

The above has been triggered by a recent incident, when, in an emotional outburst, one of my mathematical colleagues at the University —not a computing scientist— accused a number of younger computing scientists of "pedantry" because —as they do by habit— they started numbering at zero. He took consciously adopting the most sensible convention as a provocation. (Also the "End of ..." convention is viewed of as provocative; but the convention is useful: I know of a student who almost failed at an examination by the tacit assumption that the questions ended at the bottom of the first page.) I think Antony Jay is right when he states: "In corporate religions as in others, the heretic must be cast out not because of the probability that he is wrong but because of the possibility that he is right."

Plataanstraat 5 5671 AL NUENEN The Netherlands 11 August 1982 prof.dr. Edsger W. Dijkstra Burroughs Research Fellow

落款的地址见下图,位于荷兰的埃因霍温附近,红色箭头的房子,那辆蓝色的小车应该就是迪科斯彻的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.02.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (四种序列的标记方式)
  • (不能包含开头的数不美观;因为开头被包含了,下一个子序列也是有开头的,所以结尾不应被包含)
  • (Mesa这门语言采用了abcd四种标记方式,bcd三种方法总是引发错误)
  • (如果序号是1开始的话,完整的序列是1 ≤ i < N+1;换成0开始的话,则是0 ≤ i < N,后者更好)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档