¿Cómo se desarrolló la costumbre de usar corchetes para elementos de matriz?

11

Muchos lenguajes de programación usan la sintaxis a[i]para referirse al ielemento th de una matriz, secuencia o vector a, específicamente, C y Pascal (desde finales de los años 60 y principios de los 70) hacen esto. Por otro lado, algunos idiomas anteriores, como el Fortran (de la década de 1950), no utilizan esta convención. Además, estudié un poco de matemática, y los matemáticos usan corchetes para intervalos y subíndices para, bueno, matrices y matrices (o paréntesis regulares si la matriz se considera como una función de enteros no negativos).

Entonces, mi pregunta es: ¿Dónde / cómo / en qué contexto se desarrollaron estos corchetes para la suscripción de matriz y por quién?

Nota: No hay nada que engañe a esta pregunta sobre el uso de llaves en C.

einpoklum
fuente
@gnat: ¿Cómo es esto un engaño de eso?
einpoklum
1
Relacionado pero no un engañado.
Blaster
1
la segunda respuesta principal de allí cubre la historia de los corchetes
mosquito
1
@Paul Typo. Te refieres a xkcd.com/163 (el dominio xkdc está registrado en China)
1201ProgramAlarm

Respuestas:

10

El principal lenguaje precursor de C y Pascal fue Algol . La primera versión de eso fue Algol 58, que utilizó corchetes para declaraciones de matriz y referencias.

La razón por la cual Algol usó corchetes en lugar de, por ejemplo, paréntesis fue triple:

  1. porque pudieron Los primeros teclados de IBM, con los que Fortran fue diseñado, solo tenían paréntesis. Esto había cambiado cuando Algol estaba siendo especificado.
  2. La experiencia con Fortran había demostrado que los programadores a menudo se confundían con el uso excesivo de paréntesis, por lo que se consideraba un cambio sintáctico importante.
  3. la intención detrás de Algol era que se usaría para describir algoritmos, por lo que tenerlo más cerca de la notación matemática estándar tenía sentido.

Tenga en cuenta que, a diferencia de C, que usa matrices principalmente para indexar la memoria, Algol permitió que se especificaran los límites de índice superior e inferior. Nuevamente, esto estaba de acuerdo con su intención más matemática. Tanto es así, de hecho, que Algol fue el lenguaje de facto para el pseudocódigo durante muchos años.

Alex
fuente
Pero, ¿están los corchetes realmente más cerca de la notación matemática estándar? Cuando estudié coincidencia, [x]se usó para clases de equivalencia, no para posiciones de indicación dentro de vectores o matrices.
einpoklum
2
@einpoklum Más para rangos en la declaración que subíndices o superíndices en las referencias. Pero, como en realidad no podían hacer subíndices o superíndices con la tecnología de la época, optaron por la coherencia visual. Y no apuntaban a la noción matemática de la forma en que, por ejemplo, APL lo hizo. Su objetivo era expresar claramente los algoritmos, que es una rama bastante estrecha.
Alex
Ah, también, se usaron corchetes para los intervalos. Supongo que eso es como rangos en una matriz, en cierto sentido. Además, ¿estás seguro de que Algol es donde comenzó esta costumbre?
einpoklum
@einpoklum Estoy seguro de que el uso de corchetes en C y Pascal provino de Algol. El linaje está bastante bien documentado. Si hubo un predecesor de Algol 58 del que los diseñadores tomaron la sintaxis, no estoy al tanto. Es poco probable dado el momento, pero no imposible. Algol 58 no se implementó antes de Algol 60, por lo que es posible que un lenguaje no implementado sea una inspiración.
Alex
5

Esta es una lectura interesante: https://en.m.wikipedia.org/wiki/Bracket

Las siguientes son mis propias observaciones.

Los diseñadores de C tuvieron mucho cuidado al adoptar el significado de los personajes y las construcciones, ya que se habían utilizado durante cientos de años en lenguaje escrito regular. Y al hacerlo, tuvieron que trabajar con el subconjunto bastante limitado de caracteres ASCII. En el idioma occidental, se usan más caracteres de agrupación en el texto escrito, pero estos simplemente no se convirtieron en ASCII.

En lenguaje normal, el significado de paréntesis es proporcionar información secundaria sin interrumpir el mensaje principal. Esto tiene sentido cuando se llama a un procedimiento: el mensaje principal es la acción a realizar y la subinformación son los argumentos.

Las llaves se usan para agrupar. "Esta colección de palabras van juntas, se deben separar del resto". Por lo tanto, tiene sentido usarlos para bloques de código, declaraciones compuestas.

Los corchetes se usan para inserciones en texto que no formaban parte del original, para aclarar el texto original y proporcionar contexto. O para indicar omisión con puntos suspensivos: [...]. "Ella [la reina] no estaba divertida". En la programación de computadoras, tiene un poco de sentido usar el soporte para la indexación de matrices porque es un tipo de contexto que se proporciona. "¿Matriz? ¿Qué matriz? Bueno, específicamente ese elemento". Pero incluso si el significado original no cubre completamente el uso en un lenguaje de computadora, no quedan demasiadas opciones en ASCII.

Entonces, diría que es una combinación de la técnica anterior y lo que estaba disponible en el momento que condujo al uso de corchetes para la indexación de matrices.

[editar por el comentario de Alex]

Según esta fuente, ASCII se introdujo en 1963 y obtuvo la aprobación gubernamental en 1968. El desarrollo del lenguaje C no comenzó hasta 1969, según esta wiki . Por lo tanto, parece probable que el Sr. Ritchie vigilara este nuevo estándar ampliamente compatible llamado ASCII al elegir sus personajes.

Por favor, vea también la (s) otra (s) respuesta (s) que hacen que Algol, "la madre de muchos idiomas", sea una gran influencia.

Martin Maat
fuente
Creo que entiendo lo que dices, pero ASCII no se codificó hasta casi una década después de que se diseñó C. Un impacto mucho más directo fue el teclado del PDP-11 para el que C fue diseñado. Tiene sentido usar caracteres que admita. El uso de corchetes para matrices se inspiró directamente de Algol a través de BCPL y B. De manera similar para Pascal. Wirth implementó Algol-W antes de diseñar Pascal.
Alex