0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Это перевод заметки Эдсгера Вибе Дейкстра, повествование ведётся от лица автора оригинала.</p>
1
<p>Это перевод заметки Эдсгера Вибе Дейкстра, повествование ведётся от лица автора оригинала.</p>
2
<p>Чтобы обозначить последовательность натуральных чисел 2, 3, …, 12 без неприятного троеточия, по соглашению можно использовать следующие четыре варианта нотации:</p>
2
<p>Чтобы обозначить последовательность натуральных чисел 2, 3, …, 12 без неприятного троеточия, по соглашению можно использовать следующие четыре варианта нотации:</p>
3
<ol><li>2 ≤ i < 13.</li>
3
<ol><li>2 ≤ i < 13.</li>
4
<li>1 < i ≤ 12.</li>
4
<li>1 < i ≤ 12.</li>
5
<li>2 ≤ i ≤ 12.</li>
5
<li>2 ≤ i ≤ 12.</li>
6
<li>1 < i < 13.</li>
6
<li>1 < i < 13.</li>
7
</ol><p>Есть ли предпочтительные варианты? Да. Первый и второй варианты имеют преимущество: разница между обозначенным началом и концом последовательности равна длине последовательности. Также в этих вариантах при использовании смежных последовательностей можно сказать, что конец одной последовательности будет началом второй. Пока недостаточно данных, чтобы выбрать между первым и вторым вариантом, поэтому начнём сначала.</p>
7
</ol><p>Есть ли предпочтительные варианты? Да. Первый и второй варианты имеют преимущество: разница между обозначенным началом и концом последовательности равна длине последовательности. Также в этих вариантах при использовании смежных последовательностей можно сказать, что конец одной последовательности будет началом второй. Пока недостаточно данных, чтобы выбрать между первым и вторым вариантом, поэтому начнём сначала.</p>
8
<p>Есть наименьшее натуральное число. Во втором и четвёртом варианте исключены нижние границы последовательности. Это приводит к тому, что для последовательностей, которые начинаются с наименьшего натурального числа, смежные последовательности уходят из области натуральных чисел. Это неудобно и некрасиво, поэтому для обозначения нижней границы предпочтительно использовать знак ≤ как в первом и третьем варианте.</p>
8
<p>Есть наименьшее натуральное число. Во втором и четвёртом варианте исключены нижние границы последовательности. Это приводит к тому, что для последовательностей, которые начинаются с наименьшего натурального числа, смежные последовательности уходят из области натуральных чисел. Это неудобно и некрасиво, поэтому для обозначения нижней границы предпочтительно использовать знак ≤ как в первом и третьем варианте.</p>
9
<p>Теперь рассмотрим последовательности, которые начинаются с наименьшего натурального числа. Включение верхней границы здесь превращает пустую последовательность в неестественную. Это неудобно и некрасиво, поэтому для обозначения верхней границы предпочтительно использовать знак < как в первом и четвёртом варианте. Приходим к выводу, что первый вариант предпочтительный.</p>
9
<p>Теперь рассмотрим последовательности, которые начинаются с наименьшего натурального числа. Включение верхней границы здесь превращает пустую последовательность в неестественную. Это неудобно и некрасиво, поэтому для обозначения верхней границы предпочтительно использовать знак < как в первом и четвёртом варианте. Приходим к выводу, что первый вариант предпочтительный.</p>
10
<blockquote><p><strong>Обратите внимание, язык программирования Mesa, разработанный в Xerox PARC, имеет специальную нотацию для записи интервалов чисел с помощью всех четырёх соглашений, указанных выше. Опыт использования Mesa показал, что использование второго, третьего и четвёртого варианта приводит к ошибкам. Поэтому программисты при работе с Mesa используют для обозначения последовательностей первый вариант соглашения. Эта ремарка для тех, кому важно получить результаты практических экспериментов, а не только теоретические заключения.</strong></p>
10
<blockquote><p><strong>Обратите внимание, язык программирования Mesa, разработанный в Xerox PARC, имеет специальную нотацию для записи интервалов чисел с помощью всех четырёх соглашений, указанных выше. Опыт использования Mesa показал, что использование второго, третьего и четвёртого варианта приводит к ошибкам. Поэтому программисты при работе с Mesa используют для обозначения последовательностей первый вариант соглашения. Эта ремарка для тех, кому важно получить результаты практических экспериментов, а не только теоретические заключения.</strong></p>
11
</blockquote><p>Когда речь идёт о последовательности с длиной N, которую мы хотим определить по нижнему индексу, следующий важный вопрос касается того, какой индекс присвоить первому элементу. Придерживаясь первого варианта нотации, получаем нижний индекс 1 ≤ i < N+1. Но если начать с нуля, получим диапазон 0 ≤ i < N, что выглядит более понятно и красиво. Так что давайте нумеровать с нуля. Порядковый номер элемента равен числу элементов, которые предшествуют ему в последовательности. Мораль истории в том, что ноль стоит считать самым натуральным числом.</p>
11
</blockquote><p>Когда речь идёт о последовательности с длиной N, которую мы хотим определить по нижнему индексу, следующий важный вопрос касается того, какой индекс присвоить первому элементу. Придерживаясь первого варианта нотации, получаем нижний индекс 1 ≤ i < N+1. Но если начать с нуля, получим диапазон 0 ≤ i < N, что выглядит более понятно и красиво. Так что давайте нумеровать с нуля. Порядковый номер элемента равен числу элементов, которые предшествуют ему в последовательности. Мораль истории в том, что ноль стоит считать самым натуральным числом.</p>
12
<blockquote><p><strong>Многие языки программирования разработаны без должного внимания к этой детали. В Fortran сабскрипты начинаются с 1, в Algol 60 и Pascal принят третий вариант нотации. Более новый SASL использует вариант, принятый в Fortran. Последовательность в SASL одновременно является функцией положительных чисел. Жалкий подход!</strong></p>
12
<blockquote><p><strong>Многие языки программирования разработаны без должного внимания к этой детали. В Fortran сабскрипты начинаются с 1, в Algol 60 и Pascal принят третий вариант нотации. Более новый SASL использует вариант, принятый в Fortran. Последовательность в SASL одновременно является функцией положительных чисел. Жалкий подход!</strong></p>
13
</blockquote><p>Эту заметку я написал, когда один из моих коллег-математиков, но не информатик, упрекнул более молодых специалистов по информатике в педантизме из-за их привычки нумеровать последовательности с нуля. Он сознательно назвал самое разумное соглашение провокацией. Также соглашение "End of..." рассматривается как провокационное. Тем не менее оно полезное. Я видел студента, который чуть не провалился на экзамене, так как посчитал, что вопросы заканчиваются в конце первой страницы. Думаю, Энтони Джей был прав, когда заметил следующее: "В корпоративных религиях, как и в любых других, еретиков изгоняют не потому, что они неправы, а потому, что они могут быть правыми".</p>
13
</blockquote><p>Эту заметку я написал, когда один из моих коллег-математиков, но не информатик, упрекнул более молодых специалистов по информатике в педантизме из-за их привычки нумеровать последовательности с нуля. Он сознательно назвал самое разумное соглашение провокацией. Также соглашение "End of..." рассматривается как провокационное. Тем не менее оно полезное. Я видел студента, который чуть не провалился на экзамене, так как посчитал, что вопросы заканчиваются в конце первой страницы. Думаю, Энтони Джей был прав, когда заметил следующее: "В корпоративных религиях, как и в любых других, еретиков изгоняют не потому, что они неправы, а потому, что они могут быть правыми".</p>
14
<p><em>Адаптированный перевод статьи<a>Why numbering should start at zero</a>by prof.dr. Edsger W. Dijkstra.</em></p>
14
<p><em>Адаптированный перевод статьи<a>Why numbering should start at zero</a>by prof.dr. Edsger W. Dijkstra.</em></p>