Jak rozwinął się zwyczaj używania nawiasów kwadratowych dla elementów tablicy?

11

Wiele języków programowania korzysta ze składni a[i]w odniesieniu do i„elementu tablicy, sekwencji lub wektora” a- w szczególności robią to C i Pascal (z przełomu lat 60. i 70.). Z drugiej strony niektóre wcześniejsze języki, takie jak Fortran (z lat 50.), nie używają tej konwencji. Studiowałem też trochę matematyki, a matematycy używają nawiasów kwadratowych do interwałów oraz indeksów dolnych do indeksowania macierzy i macierzy (lub zwykłych nawiasów, jeśli tablicę uważa się za funkcję liczb całkowitych nieujemnych).

Moje pytanie brzmi zatem: gdzie / jak / w jakim kontekście powstały nawiasy kwadratowe do indeksowania tablic i przez kogo?

Uwaga: wcale nie jest duplikatem tego pytania na temat używania nawiasów klamrowych w C.

einpoklum
źródło
@gnat: Jak to jest dupek tego?
einpoklum
1
Powiązane, ale nie dupe.
Blaster
1
druga tam najwyższa odpowiedź dotyczy historii nawiasów kwadratowych
komara
1
@Paul Typo. Masz na myśli xkcd.com/163 (domena xkdc jest zarejestrowana w Chinach)
1201ProgramAlarm

Odpowiedzi:

10

Głównym językiem prekursorów języka C i Pascal był Algol . Najwcześniejszą wersją tego był Algol 58, który używał nawiasów kwadratowych do deklaracji tablicowych i odniesień.

Powód, dla którego Algol używał nawiasów kwadratowych zamiast na przykład nawiasów, był trzykrotnie:

  1. ponieważ mogliby. Wczesne klawiatury IBM, z którymi zaprojektowano Fortran, miały tylko nawiasy. Zmieniło się to do czasu określenia Algola.
  2. doświadczenie z Fortranem pokazało, że programiści byli często myleni z nadmiernym użyciem nawiasów, dlatego postrzegano to jako ważną zmianę składniową.
  3. celem Algola było wykorzystanie go do opisu algorytmów, więc zbliżenie go do standardowej notacji matematycznej miało sens.

Uwaga: w przeciwieństwie do C, który wykorzystuje tablice głównie do indeksowania pamięci, Algol zezwalał na określenie dolnej i górnej granicy indeksu. Ponownie było to zgodne z jego bardziej matematycznym zamiarem. Tak bardzo, że Algol był de facto językiem pseudokodu przez wiele lat.

Alex
źródło
Ale czy nawiasy kwadratowe są naprawdę bliższe standardowej notacji matematycznej? Kiedy studiowałem dopasowanie, [x]było używane do klas równoważności, a nie do pozycji wskazań w wektorach lub macierzach.
einpoklum
2
@einpoklum Więcej dla zakresów w deklaracji niż indeksy dolne lub indeksy górne w referencjach. Ponieważ jednak nie byli w stanie tworzyć indeksów dolnych i górnych za pomocą ówczesnej technologii, zdecydowali się na spójność wizualną. I nie dążyli do pojęcia matematycznego, tak jak powiedzmy APL. Celem było wyraźne wyrażenie algorytmów, które są dość wąską gałęzią.
Alex
Och, również nawiasy kwadratowe były używane do interwałów. Myślę, że to w pewnym sensie przypomina zakresy w tablicy. Ponadto - na pewno Algol jest miejscem, w którym zaczął się ten zwyczaj?
einpoklum
@einpoklum Jestem pewien, że użycie nawiasów kwadratowych w C i Pascal pochodzi z Algolu. Ród jest dość dobrze udokumentowany. Jeśli był poprzednik Algola 58, z którego projektanci wzięli składnię, nie jestem tego świadomy. Jest mało prawdopodobne, biorąc pod uwagę czas, ale nie niemożliwe. Algol 58 nie był wdrażany przed Algolem 60, więc możliwe jest, że niewdrożony język był inspiracją.
Alex
5

To ciekawa lektura: https://en.m.wikipedia.org/wiki/Bracket

Oto moje własne obserwacje.

Projektanci C bardzo uważnie przyjęli znaczenie znaków i konstrukcji, ponieważ były używane przez setki lat w zwykłym języku pisanym. W ten sposób musieli pracować z dość ograniczonym podzbiorem znaków ASCII. W języku zachodnim w tekście pisanym stosuje się więcej znaków grupujących, ale nie zostały one wprowadzone do ASCII.

W zwykłym języku nawiasy oznaczają informacje dodatkowe bez przerywania głównego komunikatu. Ma to sens przy wywoływaniu procedury: głównym komunikatem jest akcja, którą należy wykonać, a informacje dodatkowe to argumenty.

Nawiasy klamrowe służą do grupowania. „Ta kolekcja słów należy do siebie, należy oddzielić od reszty”. Dlatego sensowne jest używanie ich do bloków kodu, instrukcji złożonych.

Nawiasy kwadratowe służą do wstawiania tekstu, który nie był częścią oryginału, w celu wyjaśnienia tekstu oryginalnego i zapewnienia kontekstu. Lub wskazać pominięcie za pomocą wielokropka: [...]. „Ona [królowa] nie była rozbawiona”. W programowaniu komputerowym sensowne jest używanie nawiasu do indeksowania tablicy, ponieważ jest to pewien rodzaj kontekstu. „Tablica? Jaka tablica? Cóż, konkretnie ten element.” Ale nawet jeśli pierwotne znaczenie nie obejmuje w pełni użycia w języku komputerowym, w ASCII nie pozostało zbyt wiele innych opcji.

Powiedziałbym więc, że jest to połączenie stanu techniki i tego, co było dostępne w tym czasie, co doprowadziło do zastosowania nawiasów kwadratowych do indeksowania tablic.

[edytuj z powodu komentarza Alexa]

Według tego źródła ASCII został wprowadzony w 1963 r. I uzyskał zgodę rządu w 1968 r. Rozwój języka C rozpoczął się dopiero w 1969 r., Zgodnie z tym wiki . Wydaje się więc prawdopodobne, że Ritchie obserwował ten nowy, szeroko obsługiwany standard ASCII, wybierając swoje postacie.

Zobacz także inne odpowiedzi uzasadniające, że Algol, „matka wielu języków”, ma duży wpływ.

Martin Maat
źródło
Myślę, że rozumiem, co mówisz, ale ASCII nie zostało skodyfikowane aż do prawie dekady po zaprojektowaniu C. Znacznie bardziej bezpośredni wpływ miała klawiatura PDP-11, dla której zaprojektowano C. Sensowne jest używanie obsługiwanych znaków. Wykorzystanie nawiasów kwadratowych do tablic zostało zainspirowane bezpośrednio z Algolu przez BCPL i B. Podobnie w przypadku Pascala. Wirth wdrożył Algol-W przed zaprojektowaniem Pascala.
Alex