Bagaimana kebiasaan menggunakan kurung siku untuk elemen array berkembang?


11

Banyak bahasa pemrograman menggunakan sintaks a[i]untuk merujuk ke ielemen ke-10 dari array, urutan, atau vektor a- khususnya, C dan Pascal (dari akhir 1960-an dan awal 1970-an) melakukan hal ini. Di sisi lain, beberapa bahasa sebelumnya, seperti Fortran (dari tahun 1950-an), tidak menggunakan konvensi ini. Juga, saya belajar sedikit matematika, dan matematikawan menggunakan tanda kurung siku untuk interval, dan subskrip untuk, baik, array dan matriks subskrip (atau tanda kurung biasa jika array dianggap sebagai fungsi dari bilangan bulat non-negatif).

Jadi, pertanyaan saya adalah: Di mana / bagaimana / dalam konteks apa kurung kuadrat untuk susunan subskripsi ini dikembangkan, dan oleh siapa?

Catatan: Sama sekali tidak menipu pertanyaan ini tentang penggunaan kurung keriting di C.



@gnat: Bagaimana ini bisa dibohongi?
einpoklum

1
Terkait tetapi tidak menipu.
Blaster

1
jawaban teratas kedua di sana mencakup sejarah kurung siku
nyamuk

1
@Paul Typo. Maksud Anda xkcd.com/163 (domain xkdc terdaftar di Cina)
1201ProgramAlarm

Jawaban:


10

Bahasa prekursor utama untuk C dan Pascal adalah Algol . Versi paling awal dari itu adalah Algol 58 yang menggunakan tanda kurung siku untuk deklarasi dan referensi array.

Alasan mengapa Algol menggunakan tanda kurung siku daripada, misalnya, tanda kurung tiga kali lipat:

  1. karena mereka bisa. Keyboard IBM awal, yang dirancang dengan Fortran, hanya memiliki tanda kurung. Ini telah berubah pada saat Algol ditentukan.
  2. pengalaman dengan Fortran menunjukkan bahwa programmer sering bingung dengan penggunaan tanda kurung yang berlebihan sehingga dipandang sebagai perubahan sintaksis yang penting.
  3. maksud di balik Algol adalah bahwa itu akan digunakan untuk menggambarkan algoritma sehingga membuatnya lebih dekat dengan notasi matematika standar masuk akal.

Catatan, tidak seperti C, yang kebanyakan menggunakan array untuk mengindeks memori, Algol memungkinkan batas indeks atas dan bawah ditentukan. Sekali lagi, ini sesuai dengan niat yang lebih matematis. Begitu banyak, pada kenyataannya, bahwa Algol adalah bahasa de facto untuk kodesemu selama bertahun-tahun.


Tetapi apakah kurung siku benar-benar lebih dekat dengan notasi matematika standar? Ketika saya mempelajari pertandingan, [x]digunakan untuk kelas ekivalensi, bukan untuk posisi indikasi dalam vektor atau matriks.
einpoklum

2
@einpoklum Lebih banyak untuk rentang dalam deklarasi daripada subskrip atau superskrip dalam referensi. Tetapi, karena mereka tidak dapat melakukan subskrip atau superskrip dengan teknologi saat itu, mereka mencari konsistensi visual. Dan mereka tidak bertujuan untuk gagasan matematika dalam cara yang, katakanlah, APL lakukan. Mereka bertujuan untuk secara jelas mengekspresikan algoritma yang merupakan cabang yang cukup sempit.
Alex

Oh, juga, tanda kurung siku digunakan untuk interval. Saya kira itu seperti rentang dalam array, dalam arti tertentu. Juga - Anda yakin Algol adalah awal kebiasaan ini?
einpoklum

@einpoklum Saya yakin bahwa penggunaan tanda kurung siku dalam C dan Pascal berasal dari Algol. Silsilahnya didokumentasikan dengan cukup baik. Jika ada pendahulu Algol 58 yang diambil desainernya dari sintaks, saya tidak menyadarinya. Itu tidak mungkin diberikan waktunya tetapi bukan tidak mungkin. Algol 58 tidak diimplementasikan sebelum Algol 60 jadi mungkin saja bahasa yang tidak diterapkan adalah inspirasi.
Alex

5

Ini adalah bacaan yang menarik: https://en.m.wikipedia.org/wiki/Bracket

Berikut ini adalah pengamatan saya sendiri.

Perancang C sangat hati-hati mengadopsi makna karakter dan konstruksi karena mereka telah digunakan selama ratusan tahun dalam bahasa tertulis biasa. Dan melakukannya, mereka harus bekerja dengan subset karakter ASCII yang sangat terbatas. Dalam bahasa barat, lebih banyak karakter pengelompokan digunakan dalam teks tertulis tetapi ini tidak membuatnya menjadi ASCII.

Dalam bahasa reguler, arti tanda kurung adalah memberikan informasi sampingan tanpa mengganggu pesan utama. Ini masuk akal ketika memanggil prosedur: pesan utama adalah tindakan yang harus dilakukan dan sub-info adalah argumen.

Kurung kurawal digunakan untuk pengelompokan. "Kumpulan kata-kata ini milik bersama, harus dipisahkan dari yang lain". Jadi masuk akal untuk menggunakannya untuk blok kode, pernyataan majemuk.

Kurung kotak digunakan untuk penyisipan dalam teks yang bukan bagian dari aslinya, untuk memperjelas teks asli dan memberikan konteks. Atau untuk menunjukkan kelalaian dengan ellipsis: [...]. "Dia [ratu] tidak geli". Dalam pemrograman komputer masuk akal untuk menggunakan braket untuk pengindeksan array karena ini adalah semacam konteks yang disediakan. "Array? Array apa? Yah, khususnya elemen itu." Tetapi bahkan jika makna aslinya tidak sepenuhnya mencakup penggunaan dalam bahasa komputer, tidak ada banyak pilihan lain yang tersisa di ASCII.

Jadi saya akan mengatakan itu adalah kombinasi dari seni sebelumnya dan apa yang tersedia pada saat itu yang mengarah pada penggunaan tanda kurung siku untuk pengindeksan array.

[sunting karena komentar Alex]

Menurut sumber ini , ASCII diperkenalkan pada tahun 1963 dan mendapat persetujuan pemerintah pada tahun 1968. Pengembangan bahasa C tidak dimulai sampai 1969, menurut wiki ini . Jadi sepertinya Pak Ritchie mengawasi standar baru yang didukung luas ini yang disebut ASCII saat memilih karakternya.

Harap lihat juga jawaban lain yang menjelaskan kasus Algol, "ibu dari banyak bahasa", sebagai pengaruh yang kuat.


Saya pikir saya mengerti apa yang Anda katakan, tetapi ASCII tidak dikodifikasikan sampai hampir satu dekade setelah C dirancang. Dampak yang jauh lebih langsung adalah keyboard PDP-11 yang dirancang untuk C. Masuk akal untuk menggunakan karakter yang didukungnya. Penggunaan tanda kurung siku untuk array secara langsung terinspirasi dari Algol melalui BCPL dan B. Demikian pula untuk Pascal. Wirth menerapkan Algol-W sebelum merancang Pascal.
Alex
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.