Como se desenvolveu o costume de usar colchetes para elementos de matriz?


11

Muitas linguagens de programação usam a sintaxe a[i]para se referir ao i'ésimo elemento de uma matriz, sequência ou vetor a- especificamente, C e Pascal (do final dos anos 1960 e início dos anos 1970) fazem isso. Por outro lado, alguns idiomas anteriores, como o Fortran (da década de 1950), não usam essa convenção. Além disso, estudei um pouco de matemática, e os matemáticos usam colchetes para intervalos e subscritos para, bem, matrizes de matrizes e matrizes (ou parênteses regulares, se a matriz for vista como uma função a partir de números inteiros não negativos).

Então, minha pergunta é: onde / como / em que contexto esses colchetes para assinatura de matriz se desenvolveram e por quem?

Nota: Nem um pouco dessa pergunta sobre o uso de colchetes em C.



@gnat: Como isso é uma bobagem disso?
einpoklum

11
Relacionado, mas não um idiota.
blaster

11
segunda resposta superior lá cobre a história de colchetes
gnat 24/03

11
@Paul Typo. Você quer dizer xkcd.com/163 (o domínio xkdc está registrado na China)
1201ProgramAlarm

Respostas:


10

A principal linguagem precursora para C e Pascal foi o algol . A versão mais antiga disso era o Algol 58, que usava colchetes para declarações e referências de matriz.

O motivo pelo qual Algol usou colchetes em vez de, por exemplo, parênteses foi três vezes:

  1. porque eles poderiam. Os primeiros teclados da IBM, com os quais o Fortran foi projetado, tinham apenas parênteses. Isso mudou no momento em que Algol estava sendo especificado.
  2. A experiência com o Fortran mostrou que os programadores costumavam ser confundidos com o uso excessivo de parênteses, portanto isso era visto como uma importante mudança sintática.
  3. a intenção por trás de Algol era que ele fosse usado para descrever algoritmos, fazendo com que fosse mais próximo da notação matemática padrão.

Observe que, diferentemente de C, que usa matrizes principalmente para indexar memória, o Algol permitiu especificar limites de índice inferior e superior. Mais uma vez, isso estava de acordo com sua intenção mais matemática. Tanto que, na verdade, o Algol foi a linguagem de fato do pseudocódigo por muitos anos.


Mas os colchetes são realmente mais próximos da notação matemática padrão? Quando estudei match, [x]foi usado para classes de equivalência, não para posições de indicação dentro de vetores ou matrizes.
einpoklum

2
@einpoklum Mais para intervalos na declaração do que subscritos ou sobrescritos nas referências. Mas, como eles não podiam realmente assinar ou sobrescrever com a tecnologia da época, eles buscavam consistência visual. E eles não estavam buscando uma noção matemática da maneira que, digamos, a APL fazia. Eles pretendiam expressar claramente algoritmos, que é um ramo bastante estreito.
28418 Alex

Ah, também, colchetes foram usados ​​para intervalos. Eu acho que é como intervalos em uma matriz, em certo sentido. Além disso - você tem certeza que Algol é onde esse costume começou?
Einpoklum 26/0318

@einpoklum Tenho certeza de que o uso de colchetes em C e Pascal veio de Algol. A linhagem está razoavelmente bem documentada. Se houve um antecessor no Algol 58 de onde os designers tiraram a sintaxe, eu não o conheço. É improvável, dado o tempo, mas não impossível. O Algol 58 não foi implementado antes do Algol 60, portanto, é possível que uma linguagem não implementada tenha sido uma inspiração.
28418 Alex

5

Esta é uma leitura interessante: https://en.m.wikipedia.org/wiki/Bracket

A seguir, minhas próprias observações.

Os designers de C tomaram muito cuidado ao adotar o significado de caracteres e construções, pois eram usados ​​há centenas de anos na linguagem escrita regular. E, assim, eles tiveram que trabalhar com o subconjunto bastante limitado de caracteres ASCII. No idioma ocidental, mais caracteres de agrupamento são usados ​​no texto escrito, mas eles simplesmente não o transformaram em ASCII.

Em linguagem regular, o significado de parênteses é fornecer informações adicionais sem interromper a mensagem principal. Isso faz sentido ao chamar um procedimento: a mensagem principal é a ação a ser executada e as sub-informações são os argumentos.

Os chavetas são usadas para agrupar. "Esta coleção de palavras pertence uma à outra e deve ser separada das demais". Portanto, faz sentido usá-los para blocos de código, instruções compostas.

Os colchetes são usados ​​para inserções em texto que não faziam parte do original, para esclarecer o texto original e fornecer contexto. Ou para indicar omissão com reticências: [...]. "Ela [a rainha] não se divertiu". Na programação de computadores, faz um pouco de sentido usar o suporte para a indexação de array, porque é um tipo de contexto fornecido. "Matriz? Que matriz? Bem, especificamente esse elemento." Mas mesmo que o significado original não cubra totalmente o uso em uma linguagem de computador, não existem muitas outras opções no ASCII.

Então, eu diria que é uma combinação da técnica anterior e o que estava disponível na época que levou ao uso de colchetes para indexação de matriz.

[editar por causa do comentário de Alex]

Segundo esta fonte, o ASCII foi introduzido em 1963 e obteve aprovação do governo em 1968. O desenvolvimento da linguagem C não começou até 1969, de acordo com este wiki . Portanto, parece provável que o Sr. Ritchie ficou de olho nesse novo padrão amplamente suportado chamado ASCII ao escolher seus personagens.

Por favor, veja também as outras respostas que defendem Algol, "a mãe de muitas línguas", sendo uma forte influência.


Acho que entendi o que você está dizendo, mas o ASCII não foi codificado até quase uma década após o design de C. Um impacto muito mais direto foi o teclado do PDP-11 para o qual C foi projetado. Faz sentido usar caracteres que ele suporta. O uso de colchetes para matrizes foi diretamente inspirado em Algol via BCPL e B. Da mesma forma para Pascal. Wirth implementou Algol-W antes de projetar Pascal.
28418 Alex
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.