Come si è sviluppata l'usanza di usare parentesi quadre per gli elementi dell'array?


11

Molti linguaggi di programmazione usano la sintassi a[i]per riferirsi all i'elemento di un array, una sequenza o un vettore a- nello specifico, C e Pascal (dalla fine degli anni '60 e all'inizio degli anni '70) lo fanno. D'altra parte, alcune lingue precedenti, come quella di Fortran (degli anni '50), non usano questa convenzione. Inoltre, ho studiato un po 'di matematica e i matematici usano parentesi quadre per intervalli e pedici per, bene, abbonamento a matrice e matrice (o parentesi regolari se la matrice è pensata come una funzione da numeri interi non negativi).

Quindi, la mia domanda è: dove / come / in quale contesto si sono sviluppate queste parentesi quadre per la sottoscrizione di array e da chi?

Nota: non è affatto un inganno di questa domanda sull'uso delle parentesi graffe in C.



@gnat: in che modo questo è un inganno?
einpoklum,

1
Correlato ma non un duplicato.
blaster

1
la seconda risposta più importante riguarda la storia delle parentesi quadre
moscerino del

1
@Paul Typo. Intendi xkcd.com/163 (il dominio xkdc è registrato in Cina)
1201ProgramAlarm

Risposte:


10

Il principale linguaggio precursore di C e Pascal era Algol . La prima versione di questo fu Algol 58 che utilizzava parentesi quadre per dichiarazioni e riferimenti di array.

Il motivo per cui Algol utilizzava parentesi quadre anziché, ad esempio, le parentesi era triplice:

  1. perché potevano. Le prime tastiere IBM, con cui Fortran era stato progettato, avevano solo parentesi. Questo era cambiato al momento della specifica di Algol.
  2. l'esperienza con Fortran aveva dimostrato che i programmatori erano spesso confusi con l'uso eccessivo di parentesi, quindi era visto come un importante cambiamento sintattico.
  3. l'intento dietro Algol era che sarebbe stato usato per descrivere algoritmi, quindi averlo più vicino alla notazione matematica standard aveva senso.

Si noti che, diversamente da C, che utilizza gli array principalmente per indicizzare la memoria, Algol ha consentito di specificare sia i limiti di indice inferiore che superiore. Ancora una volta, questo era in linea con il suo intento più matematico. Tanto che, in effetti, l'Algol è stato di fatto il linguaggio per pseudocodice per molti anni.


Ma le parentesi quadre sono davvero più vicine alla notazione matematica standard? Quando ho studiato la corrispondenza, è [x]stato utilizzato per le classi di equivalenza, non per le posizioni di indicazione all'interno di vettori o matrici.
einpoklum,

2
@einpoklum Altro per intervalli nella dichiarazione rispetto a pedici o apici nei riferimenti. Ma, dato che in realtà non potevano fare abbonamenti o apice con la tecnologia del tempo, cercavano coerenza visiva. E non miravano a una nozione matematica come dicevano APL. Miravano a esprimere chiaramente algoritmi che è un ramo abbastanza stretto.
Alex

Oh, anche, le parentesi quadre sono state usate per gli intervalli. Immagino che sia come intervalli in un array, in un certo senso. Inoltre, sei sicuro che Algol è dove è iniziata questa usanza?
einpoklum,

@einpoklum Sono sicuro che l'uso di parentesi quadre in C e Pascal provenisse dall'Algol. Il lignaggio è abbastanza ben documentato. Se c'era un predecessore di Algol 58 da cui i designer hanno preso la sintassi, non ne sono consapevole. È improbabile dato il tempismo ma non impossibile. Algol 58 non è stato implementato prima di Algol 60, quindi è possibile che una lingua non implementata sia stata fonte d'ispirazione.
Alex

5

Questa è una lettura interessante: https://en.m.wikipedia.org/wiki/Bracket

Le seguenti sono le mie osservazioni.

I progettisti C si sono presi molta cura dell'adozione del significato di personaggi e costrutti poiché erano stati usati per centinaia di anni in un normale linguaggio scritto. E così facendo, hanno dovuto lavorare con il sottoinsieme abbastanza limitato di caratteri ASCII. Nella lingua occidentale, nel testo scritto vengono utilizzati più caratteri di raggruppamento, ma questi non lo trasformano in ASCII.

In un linguaggio normale, il significato delle parentesi è fornire informazioni collaterali senza interrompere il messaggio principale. Questo ha senso quando si chiama una procedura: il messaggio principale è l'azione da eseguire e le informazioni secondarie sono gli argomenti.

Le parentesi graffe vengono utilizzate per il raggruppamento. "Questa raccolta di parole appartiene insieme, devono essere distinte dalle altre". Quindi ha senso usarli per blocchi di codice, istruzioni composte.

Le parentesi quadre vengono utilizzate per inserimenti nel testo che non facevano parte dell'originale, per chiarire il testo originale e fornire contesto. O per indicare l'omissione con i puntini di sospensione: [...]. "Lei [la regina] non era divertita". Nella programmazione per computer ha poco senso usare la parentesi per l'indicizzazione dell'array perché è un tipo di contesto fornito. "Matrice? Quale matrice? Bene, in particolare quell'elemento." Ma anche se il significato originale non copre completamente l'uso in un linguaggio informatico, in ASCII non sono rimaste troppe altre opzioni.

Quindi direi che è una combinazione di arte nota e ciò che era disponibile al momento che ha portato all'uso di parentesi quadre per l'indicizzazione di array.

[modifica a causa del commento di Alex]

Secondo questa fonte, ASCII fu introdotto nel 1963 e ottenne l'approvazione governativa nel 1968. Lo sviluppo del linguaggio C non iniziò fino al 1969, secondo questo wiki . Quindi sembra probabile che Ritchie abbia tenuto d'occhio questo nuovo standard ampiamente supportato chiamato ASCII quando ha scelto i suoi personaggi.

Vedi anche le altre risposte che fanno valere la causa di Algol, "la madre di molte lingue", che ha una forte influenza.


Penso di ottenere quello che stai dicendo, ma ASCII non è stato codificato fino a quasi un decennio dopo la progettazione di C. Un impatto molto più diretto è stata la tastiera del PDP-11 per cui C è stato progettato. Ha senso usare i caratteri che supporta. L'uso di parentesi quadre per array è stato direttamente ispirato da Algol tramite BCPL e B. Allo stesso modo per Pascal. Wirth ha implementato Algol-W prima di progettare Pascal.
Alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.