首页 > 其他分享 >[翻译]为什么编号应该从零开始

[翻译]为什么编号应该从零开始

时间:2024-04-01 13:58:28浏览次数:20  
标签:翻译 12 惯例 自然数 从零开始 端点 编号 序列 下标

当不使用三个点表示自然数 2, 3, ..., 12 的子序列的话,有如下四种惯例可供选择:
a) 2 ≤ i < 13
b) 1 < i ≤ 12
c) 2 ≤ i ≤ 12
d) 1 < i < 13
有没有理由更倾向于其中一种惯例而不是另一种呢?是有的。我们可以观察到惯例 a) 和 b) 的优势在于它们左右端点的差值等于子序列的长度。我们也同样观察到在 a) 或者 b) 惯例中,如果有两个子序列是相邻的话意味着其中一个的右端点等于另一个的左端点(译者:即使用 a 的话,[2, 13) [13, 22)是两个相邻的序列)。尽管上面的发现有些作用,但它们并不能使我们在 a) 和 b) 之间做出选择;所以让我们重新开始。

因为存在一个最小的自然数,那么在不包含左端点——如 b) 和 d) 中所示——会使从最小自然数开始的子序列的左端进入非自然数的领域(译者:即序列从 0 开始,但是左端却是 -1,而 -1 不是自然数)。< 的是丑陋的,因此对于左端,我们更喜欢 ≤,如 a) 和 c) 所示。考虑从最小自然数开始的子序列:在序列缩小到空序列时包含右端点将使端点变成非自然数(译者:即从 0...12 缩小为空序列,c 形式的空序列为 0 ≤ i ≤ -1,而 a 是 0 ≤ i < 0)。 的是丑陋的,因此对于右端,我们更喜欢 <,如 a) 和 d) 所示。 我们得出结论,惯例 a) 是更好的。

备注:由 Xerox PARC 开发的编程语言 Mesa 对所有四种惯例的整数区间都有特殊的表示法。Mesa 的广泛实践经验表明,使用其他三种惯例是造成持续不断的笨拙(clumsiness)和错误的源头,基于这种经验,现在强烈建议 Mesa 程序员不要使用后三种表示法。我之所以提到这个实际证据——尽管价值有限——因为有些人对未经实践证实的结论感到不舒服。

当处理一个长度为 N 的序列,我们希望通过下标来区分其元素时,下一个令人烦恼的问题是为其起始元素分配什么样的下标值。遵循惯例 a) 时,从下标 1 开始,得到的下标范围是 1 ≤ i < N+1;然而,从 0 开始则得到更好的 0 ≤ i < N。因此,让我们的序号从零开始:一个元素的序号(下标)等于序列中其前面的元素数量。这个故事的寓意是,经过那么多世纪之后,我们最好将零视为最自然的数!

备注:许多编程语言在设计时没有注意到这个细节。在 FORTRAN 中,下标总是从 1 开始;在 ALGOL 60 和 PASCAL 中,采用了惯例 c);较新的 SASL 又回到了 FORTRAN 的惯例:SASL 中的序列同时也是对正整数的函数。真是遗憾!

我之所以写了这些内容是因为最近发生的一件事。当时,我在大学里的数学同事之一——不是计算科学家——情绪非常激动地指责了一些年轻的计算科学家存在的“学究气”,因为——他们习惯于——从零开始编号。他有意地将采用最明智的惯例视为一种挑衅。(“End of ...”惯例也被视为挑衅;但这种惯例是有用的:我知道一个学生差点因为默认考题仅限于第一页底部而在考试中不及格。)我认为安东尼·杰(Antony Jay)说得对:“在团体宗教中,就像在其他宗教中一样,异端必须被驱逐出去,不是因为他可能是错的,而是因为他可能是对的。”

1982年8月11日 Edsger W. Dijkstra

备注

原文是 PDF Why numbering should start at zero

HTML 版本

关于翻译

如有更合适的翻译请告诉我。

  1. “convention” 在本文中翻译为惯例,也有“约定”的意思。
  2. “他有意地将采用最明智的惯例视为一种挑衅”原文是“He took consciously adopting the most sensible convention as a provocation”。“provocation”是不是翻译成冒犯更合适?

标签:翻译,12,惯例,自然数,从零开始,端点,编号,序列,下标
From: https://www.cnblogs.com/ende93/p/18108059

相关文章

  • 【从零开始AI绘画2】StableDiffusionWebUI的基础使用
    StableDiffusionWebUI的基础使用第一章中已经完成了SDwebui的部署已经初始化,接下来我们开始基础使用,涉及更细节高级的功能本文暂时不写文章目录StableDiffusionWebUI的基础使用界面简介一、大模型SDcheckpoint加载checkpoint下载checkpoint模型二、提示词正向提示词......
  • 从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真
    背景知识当我们探索未来的交通系统和智能交通解决方案时,车辆到一切(Vehicle-to-Everything,V2X)通信技术显得尤为重要。V2X是指在车辆与车辆(V2V)、车辆与基础设施(V2I)、车辆与行人(V2P)以及车辆与网络(V2N)之间进行的通信。这种技术能够提高道路安全,优化交通流量,减少拥堵,提升驾驶体验......
  • 【C语言】从零开始:用C语言实现顺序表
    欢迎来CILMY23的博客本篇主题为 从零开始:用C语言实现顺序表个人主页:CILMY23-CSDN博客C语言专栏:http://t.csdnimg.cn/hQ5a9Python系列专栏:http://t.csdnimg.cn/HqYo8上一篇C语言博客: http://t.csdnimg.cn/I4Zgf感谢观看,支持的可以给个一键三连,点赞关注+收藏。目录一......
  • 基于Python实现多功能翻译助手(下)
            为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。翻译历史记录功能importjson#假设有一个用于存储历史记录的json文件HISTORY_FILE='translation_history.json'#初始化历史记......
  • 服务端工程师进化史-从零开始的APP开发(5)
    前章1.开发环境搭建2.项目环境搭建3.golang项目基础框架-前篇4.golang项目基础框架-后篇开始本篇开始搭建管理后台的前端项目,其实纯讲前端好像没啥营养,刚好本项目是采用旧项目改造的基础框架搭建的,就讲讲改造过程中,遇到难点,以及如何处理!主要是笔者工作期间的产物,在给......
  • 打造DiTing聊天室之从零开始:准备工作指南
    前言Hello,我是单木。接下来我将会开启一个新的博客系列,使用GoLang从0到1实现一个IM聊天室项目。为什么要做这个项目说实话,作为一个Javer,我对于Go的了解也还仅限于前两天时间刚刚突击的基本语法,但是没办法,我即将实习的公司采用Go作为技术栈,我只能开始转战Go的旅程。......
  • 线性回归从零开始(麻雀虽小五脏俱全)
    目录构造数据集初始化模型参数定义模型定义损失函数定义优化算法训练过程线性回归是一个很好能理解深度学习的模型,麻雀虽小五脏俱全。构造数据集defsynthetic_data(w,b,num_examples):X=torch.normal(0,1,(num_examples,len(w)))y=torch.matmul(X,w)+by......
  • qt语言国际化(翻译),并实现多窗口同时翻译
    https://blog.csdn.net/qq_15181569/article/details/135934033一、.pro文件中添加支持的语言在.pro文件中添加下面几句,支持中文和英文TRANSLATIONS=lanague_cn.ts\lanague_en.ts12二、通过qt语言家更新翻译生成.ts文件完成以后在工程目录可以看......
  • Kubernetes超详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战
    k8s概述k8sgithub地址:https://github.com/kubernetes/kubernetes官方文档:https://kubernetes.io/zh-cn/docs/home/k8s,全程是kubernetes,这个名字源于希腊语,意为"舵手"或"飞行员”k8s这个缩写是因为k和s之间有八个字符Google在2014年开源了k8s项目,k8s是一个......
  • 【matlab】【2024年】【优化算法】【黑风筝算法】【BKA】【附带论文中英翻译网页版】
            本文创新性地提出了黑风筝算法(BKA),这是一种受黑风筝迁徙和掠食行为启发的元启发式优化算法。BKA集成了柯西突变策略和Leader策略,增强了算法的全局搜索能力和收敛速度。这种新颖的组合在探索全球解决方案和利用本地信息之间取得了良好的平衡。在CEC-2022和CEC-20......