Esta es una pregunta sobre la que me he preguntado (y me han preguntado) durante mucho tiempo.
En los lenguajes de programación (¿la mayoría? ¿Todos?), Un índice comienza en cero para una matriz, cadena, etc.
Pensé, tal vez, que tenía que ver con que todo estuviera enraizado en binario. Pero no estoy seguro de la idea de llevar a la necesidad en el sistema decimal: ¿por qué no comenzar un índice desde 1?
¿Alguien tiene conocimiento histórico de lenguajes de programación donde se haya explicado la decisión de comenzar índices en cero?
¡Gracias!
EDITAR: Los escritos de Dijkstra son más útiles desde un punto de vista matemático, pero incluso él ha notado que no todos los idiomas están indexados a cero. La explicación de WBT también tiene sentido por qué uno comenzaría con cero en función de las direcciones de memoria. (Sé que algunos idiomas manejan la indexación ligeramente diferente según la manipulación de la matriz).
No busco necesariamente el por qué ( lo cual aprecio mucho porque ayuda a una mayor comprensión), sino más bien en el sentido de cuándo se convirtió en la convención y / o si se puede rastrear a un idioma específico.
Entonces, por ejemplo, en K&R C, cuando se discuten los índices de matriz, K o R explica con naturalidad: "Los subíndices de matriz siempre comienzan en cero en C ..." (p. 22) Más adelante, al discutir una función para procesar el carácter matrices, "... un diseño más útil sería devolver la longitud de la línea, o cero si se encuentra el final del archivo. El cero es un retorno aceptable al final del archivo porque nunca es una longitud de línea válida". (pág. 127)
Basado en K&R, deduzco a) que la convención se adoptó de otra parte, por lo que C no es la inspiración detrás de la indexación cero yb) posiblemente haya razones más profundas para su uso en base al segundo ejemplo. Sé que K&R es ampliamente considerado por su prosa clara, así que esa es otra razón por la que lo incluyo, para dar un ejemplo de lo que esperaba que otro lenguaje documentado hiciera para explicar la razón detrás de la indexación cero.
Creo que tanto WBT como btilly ofrecen razones igualmente buenas; Me preguntaba si alguien que quizás conociera lenguajes antiguos (¿pre-C?) Que documentara la decisión de diseño. Y al mismo tiempo reconozco que tal información puede no existir.