Esta é uma pergunta sobre a qual me pergunto (e me perguntam) há muito tempo.
Em (quase? Todas?) Linguagens de programação, um índice começa em zero para uma matriz, string etc. Eu reconheço que se tornou uma convenção ao longo do tempo, adotada em muitas linguagens, mas alguém pode apontar a origem disso?
Eu pensei que talvez tivesse a ver com tudo estar enraizado no binário. Mas não tenho certeza da idéia que leva à necessidade no sistema decimal - por que não iniciar um índice a partir de 1?
Alguém tem conhecimento histórico de linguagens de programação em que a decisão de iniciar índices em zero possa ter sido explicada?
Obrigado!
EDIT: Os escritos de Dijkstra são mais úteis do ponto de vista matemático, mas mesmo ele observou, nem todas as línguas são indexadas a zero. A explicação do WBT também faz sentido sobre por que alguém começaria com zero com base nos endereços de memória. (Eu sei que algumas linguagens manipulam a indexação um pouco diferente com base na manipulação da matriz.)
Eu não estou necessariamente procurando o porquê (que eu aprecio muito porque ajuda a entender mais), mas mais ao longo de quando isso se tornou a convenção e / ou se pode ser rastreado para um idioma específico.
Assim, por exemplo, no C de K&R, ao discutir índices de matriz, K ou R explica com simplicidade: "Os subscritos de matriz sempre começam em zero em C ..." (p. 22) Posteriormente, ao discutir uma função para processar caracteres matrizes, "... um design mais útil seria retornar o comprimento da linha ou zero se o final do arquivo for encontrado. Zero é um retorno aceitável no final do arquivo, porque nunca é um comprimento de linha válido." (p. 127)
Com base em K&R, concluo: a) a convenção é adotada de outro lugar; portanto, C não é a inspiração por trás da indexação zero eb) existem possíveis razões mais profundas para seu uso com base no segundo exemplo. Eu sei que o K&R é tão amplamente considerado por sua prosa clara, então esse é outro motivo para incluí-lo, para dar um exemplo do que eu esperava que outra linguagem documentada fizesse para explicar o motivo por trás da indexação zero.
Eu acho que o WBT e o btilly oferecem igualmente boas razões; Eu me perguntei se alguém que talvez conhecesse idiomas antigos (pré-C?) Que documentassem a decisão de design. E, ao mesmo tempo, reconheço que essas informações podem não existir.