为什么现代科学编号应该从零开始?

翻译自大神Edsger W. Dijkstra的英语原文

表示自然数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)最受青睐。

备注 产生于Xerox PARC的编程语言Mesa对所有四种文法都有特定记号表示。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开始编号—他们习惯这么做。他有意识地采取最明智的文法作为挑衅。(此外,“......的结束"文法被视为有挑衅性的;但是这个文法有用:我了解到有一个学生在默认猜想问题在第一页的底部结束情况下几乎挂科。)我认为安东尼·杰伊(Antony Jay)说得对:“人数优势型的宗教有这样的情况存在,异教徒必须被驱逐,不是因为他错了,而是因为他是正确的,而其他各种群体也有类似情况。”


扫描二维码关注公众号,回复: 5391683 查看本文章
Plataanstraat 5
5671 AL NUENEN
The Netherlands
  11 August 1982
prof.dr. Edsger W. Dijkstra
Burroughs Research Fellow

抄写者:凯文·哈利(Kevin Hely)。
最后修订于2008年5月2日星期五。

猜你喜欢

转载自www.cnblogs.com/xsjzhao/p/10463827.html
今日推荐