Dizi elemanları için köşeli parantez kullanma geleneği nasıl gelişti?


11

Birçok programlama dili sözdizimini bir dizi, sekans veya vektörün 'elementine a[i]atıfta bulunmak için kullanır - özellikle C ve Pascal (1960'ların sonlarından ve 1970'lerin başlarından itibaren) bunu yapar. Öte yandan, Fortran (1950'lerden) gibi daha önceki bazı diller bu sözleşmeyi kullanmaz. Ayrıca, biraz matematik çalıştım ve matematikçiler aralıklar için köşeli parantez kullanırlar ve dizi, matris aboneliği (veya dizi negatif olmayan tamsayıların bir işlevi olarak düşünülürse normal parantezler) için abonelikler kullanırlar.ia

Benim sorum şu: Dizi aboneliği için bu köşeli parantezler nerede / nasıl / hangi bağlamda gelişti ve kim tarafından?

Not: Bu sorunun C'de kıvırcık parantez kullanımı hakkında hiç bir sorumluluğu yoktur .



@gnat: Bu nasıl bir dupe?
einpoklum

1
İlgili ama bir dupe değil.
Blaster

1
orada ikinci üst cevap köşeli ayraçların tarihini kapsar
gnat

1
@Paul Typo. Sen ortalama xkcd.com/163 (xkdc alanı Çin'de kayıtlı)
1201ProgramAlarm

Yanıtlar:


10

C ve Pascal'ın ana öncü dili Algol'du . Bunun en eski sürümü, dizi bildirimleri ve referanslar için köşeli parantez kullanan Algol 58 idi .

Algol'ün örneğin parantez yerine köşeli parantez kullanmasının nedeni üç kat olmuştur:

  1. çünkü yapabilirlerdi. Fortran'ın tasarlandığı ilk IBM klavyelerinde sadece parantez vardı. Algol'un belirtildiği zaman bu durum değişmişti.
  2. Fortran ile ilgili deneyim, programcıların genellikle parantezlerin aşırı kullanımı ile karıştırıldığını gösterdiği için önemli bir sözdizimsel değişiklik olarak görülüyordu.
  3. Algol'un arkasındaki amaç, algoritmaları tanımlamak için kullanılması ve böylece standart matematiksel gösterime daha yakın olmasıydı.

Not: Belleği dizinlemek için çoğunlukla dizileri kullanan C'den farklı olarak Algol, hem alt hem de üst dizin sınırlarının belirlenmesine izin verdi. Yine, bu daha matematiksel niyetiyle uyumluydu. O kadar ki, aslında, Algol uzun yıllar sahte kod için fiili dildi.


Ancak köşeli parantezler standart matematiksel gösterime gerçekten daha yakın mı? Kibrit okuduğumda, [x]denklik sınıfları için kullanıldı, vektörler veya matrisler içindeki gösterge pozisyonları için değil.
einpoklum

2
@einpoklum Beyannamedeki aralıklar için, referanslardaki aboneliklerden veya üst yazılardan daha fazlası. Ancak, zamanın teknolojisiyle gerçekten abonelik veya üst yazı yapamadıkları için görsel tutarlılık için gittiler. APL'nin yaptığı gibi matematiksel düşünceyi hedeflemiyorlardı. Oldukça dar bir dal olan algoritmaları açıkça ifade etmeyi amaçlıyorlardı.
Alex

Ayrıca, aralıklar için köşeli parantezler de kullanıldı. Sanırım bu bir dizideki aralıklar gibi, bir anlamda. Ayrıca - Algol bu geleneğin başladığı yer olduğundan emin misiniz?
einpoklum

@einpoklum C ve Pascal'da köşeli parantez kullanımının Algol'den geldiğinden eminim. Köken oldukça iyi belgelenmiştir. Algol 58'in tasarımcıların sözdizimini aldığı bir öncüsü varsa, farkında değilim. Zamanlaması beklenmedik ama imkansız değil. Algol 58, Algol 60'tan önce uygulanmadığından, uygulanmayan bir dilin ilham kaynağı olması mümkündür.
Alex

5

Bu ilginç bir okuma: https://en.m.wikipedia.org/wiki/Bracket

Aşağıdakiler benim kendi gözlemlerim.

C tasarımcıları yüzlerce yıldır düzenli yazı dilinde kullanıldıkları için karakterlerin ve yapıların anlamını benimsemeye büyük özen gösterdiler. Ve bunu yaparken, ASCII karakterlerinin oldukça sınırlı bir alt kümesiyle çalışmak zorundaydılar. Batı dilinde, yazılı metinde daha fazla gruplama karakteri kullanılır, ancak bunlar ASCII'ye dönüşmez.

Normal dilde, parantezlerin anlamı, ana mesajı kesmeden yan bilgi sağlamaktır. Bir yordamı çağırırken bu mantıklıdır: ana mesaj, gerçekleştirilecek eylemdir ve alt bilgi bağımsız değişkenlerdir.

Kıvırcık parantez gruplama için kullanılır. "Bu sözcük koleksiyonu bir arada, diğerlerinden ayrılmalıdır". Bu yüzden bunları kod blokları, bileşik ifadeler için kullanmak mantıklıdır.

Köşeli parantezler, orijinal metnin bir parçası olmayan metne eklemek, orijinal metni netleştirmek ve bağlam sağlamak için kullanılır. Veya elips ile ihmali belirtmek için: [...]. "Kraliçe eğlendirilmedi". Bilgisayar programlamada, dizi indeksleme için braketi kullanmak biraz mantıklıdır çünkü sağlanan bir tür bağlamdır. "Dizi? Hangi dizi? Evet, özellikle bu öğe." Ancak orijinal anlam bir bilgisayar dilinde kullanımı tam olarak kapsamasa bile, ASCII'de çok fazla seçenek kalmamıştır.

Bu yüzden önceki tekniğin ve o sırada dizinin indekslenmesi için köşeli parantezlerin kullanımına yol açan bir kombinasyon olduğunu söyleyebilirim.

[Alex'in yorumu nedeniyle düzenle]

Bu kaynağa göre , ASCII 1963'te tanıtıldı ve 1968'de hükümet onayı aldı. Bu wiki'ye göre C dilinin gelişimi 1969'a kadar başlamadı . Bu yüzden Bay Ritchie, karakterlerini seçerken ASCII adı verilen bu yeni yaygın standarda dikkat etti.

Ayrıca, güçlü bir etki olan "birçok dilin annesi" olan Algol için dava açan diğer cevaplara da bakınız.


Sanırım söylediklerini aldım ama ASCII, C tasarlandıktan yaklaşık on yıl kadar önce kodlanmadı. Çok daha doğrudan bir etki, C'nin tasarlandığı PDP-11'in klavyesiydi. Desteklediği karakterleri kullanmak mantıklı. Diziler için köşeli parantezlerin kullanımı doğrudan BCPL ve B aracılığıyla Algol'dan esinlenmiştir. Benzer şekilde Pascal için. Wirth, Pascal'ı tasarlamadan önce Algol-W'yi uyguladı.
Alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.