Кстати, сейчас посмотрел в свой код на Эрланге. На весь проект три вызова функции lists:nth (индексация от единицы). Зато вызовов lists:map, lists:filter, [Head | Tail] просто сотни…
Так есть же языки помедленнее и поудобнее, выбирайте, какой больше по душе. Посмотрите на Lua, в конце-концов, неплохой вариант для начинающих. Вот хорошее начало.
Абсолютное значение количества ошибок для функции не имеет смысла.
Относительное значение, скажем, вероятность допустить ошибку при использовании функции гораздо информативнее.
Хотелось бы все же увидеть примеры. А то голословных заявлений «практически все», «почти не бывает примеров, где индексация с 1 удобнее» много, а кода мало. Единственное, что упоминалось толкового — реализация двумерного массива одномерным.
О том и речь, усилия и шансы одинаковы. Ни к чему ломать копья.
Индексация с нуля необходима в языках низкого уровня, близких к железу, потому что железо оперирует смещениями. У языков высокого уровня должен быть выбор индексации по запросу программиста, наиболее подходящий для задачи.
Let n be the number of elements in the heap and i be an arbitrary valid index of the array storing the heap. If the tree root is at index 0, with valid indices 0 through n − 1, then each element a at index i has
children at indices 2i + 1 and 2i + 2
its parent floor((i − 1) ∕ 2).
Alternatively, if the tree root is at index 1, with valid indices 1 through n, then each element a at index i has
children at indices 2i and 2i +1
its parent at index floor(i ∕ 2).
Это низкоуровневый пример, а на нижнем уровне без индексации с нуля действительно тяжело. Выше я привел пример, когда индексация с единицы проще и безопаснее, а при индексации с нуля приходится «следить за единичками во всей программе»
Мы можем написать примеры за любую сторону, в ИТ есть языки, которые реализуют индексацию с 1, есть языки, которые позволяют вводить любую индексацию, а если вспомнить математику, то в ней есть ряды Тейлора и Фурье, в которых индексация идет с нуля, и гармонические ряды, в которых индексация идет с единицы.
Вот о чем, нужно говорить новичкам, а не давить авторитетом и не аппелировать к Кернигану/Ричи/Страуструпу и т.д.
Простой пример в ответ, рисование рамки вокруг экрана, воспользуемся функцией drawLine(x1, y1, x2, y2).
Индексация с нуля, попробуйте забыть -1 и получите Access Violation, SEGFAULT или просто порчу данных:
drawLine(0, 0, ITEM_WIDTH-1, 0); // top line
drawLine(0, 0, 0, ITEM_HEIGHT-1); // left line
drawLine(ITEM_WIDTH-1, 0, ITEM_WIDTH-1, ITEM_HEIGHT-1); // right line
drawLine(0, ITEM_HEIGHT-1, ITEM_WIDTH - 1, ITEM_HEIGHT-1); // bottom line
Индексация с единицы:
drawLine(1, 1, ITEM_WIDTH, 1); // top line
drawLine(1, 1, 1, ITEM_HEIGHT); // left line
drawLine(ITEM_WIDTH, 1, ITEM_WIDTH, ITEM_HEIGHT); // right line
drawLine(1, ITEM_HEIGHT, ITEM_WIDTH, ITEM_HEIGHT); // bottom line
Индексация с нуля дает плюсы, когда мы работаем с началом массива, но индексация с единицы удобнее, когда надо работать с концом массива (обращаясь к последнему элементу через длину массива без "-1").
Поэтому я не могу сказать, что какой-то из вариантов лучше, понятнее или проще. Они равнозначны.
допустим, вы хотите реализовать двумерный массив на базе одномерного.
Зачем это допущение в языке высокого уровня? Это совершенно нормальный случай для С, но язык высокого уровня должен предоставлять эту абстракцию из коробки.
Надеюсь теперь видно, что индексация с нуля — это не просто так?
Неужели вы думали что вы умнее создателей C, C++, Java, C#?
Хорошее объяснение, зачем в низкоуровневом языке нужна индексация с нуля. Выше пример про двумерные массивы тоже хорош.
Но на высокоуровневом языке эта задача решается вот так:
ResultArr = ArrOne ++ ArrTwo.
Это Эрланг, а индексация в нем с единицы. Неужели вы думали, что вы умнее создателей Эрланга, Фортрана, Луа?
Так есть же языки помедленнее и поудобнее, выбирайте, какой больше по душе. Посмотрите на Lua, в конце-концов, неплохой вариант для начинающих. Вот хорошее начало.
Относительное значение, скажем, вероятность допустить ошибку при использовании функции гораздо информативнее.
bash.im/quote/111111
Индексация с нуля необходима в языках низкого уровня, близких к железу, потому что железо оперирует смещениями. У языков высокого уровня должен быть выбор индексации по запросу программиста, наиболее подходящий для задачи.
en.wikipedia.org/wiki/Binary_heap#Heap_implementation
Можно увидеть хотя бы парочку, не относящихся к Фурье?
Мы можем написать примеры за любую сторону, в ИТ есть языки, которые реализуют индексацию с 1, есть языки, которые позволяют вводить любую индексацию, а если вспомнить математику, то в ней есть ряды Тейлора и Фурье, в которых индексация идет с нуля, и гармонические ряды, в которых индексация идет с единицы.
Вот о чем, нужно говорить новичкам, а не давить авторитетом и не аппелировать к Кернигану/Ричи/Страуструпу и т.д.
Индексация с нуля, попробуйте забыть -1 и получите Access Violation, SEGFAULT или просто порчу данных:
Индексация с единицы:
Индексация с нуля дает плюсы, когда мы работаем с началом массива, но индексация с единицы удобнее, когда надо работать с концом массива (обращаясь к последнему элементу через длину массива без "-1").
Поэтому я не могу сказать, что какой-то из вариантов лучше, понятнее или проще. Они равнозначны.
Зачем это допущение в языке высокого уровня? Это совершенно нормальный случай для С, но язык высокого уровня должен предоставлять эту абстракцию из коробки.
Хорошее объяснение, зачем в низкоуровневом языке нужна индексация с нуля. Выше пример про двумерные массивы тоже хорош.
Но на высокоуровневом языке эта задача решается вот так:
Это Эрланг, а индексация в нем с единицы. Неужели вы думали, что вы умнее создателей Эрланга, Фортрана, Луа?