Programlama dilleri neden atama için = kullanmaya başladı?


13

Çoğu erken algoritma kitabında, <-ödev ve =karşılaştırmaya gönderme yapılır. Ancak günümüzde =atama için kullanılmayan tek diller Pascal ( :=) ve COOL gibi oyuncak dilleridir . Modern programlama dillerinin =matematiksel eşitlik anlamı yerine anlam atamasına dönüşmesine ne sebep oldu ?


8
Beni başlama ===...
Deer Hunter

1
algoritma çalışmalarında yaygın olarak kalır; bir algoritma yazarken ödev için kullanılan üç ortak göstergeden biridir (diğerleri :=ve =). Programcıların hepsinin kullanması =matematikçilerin düştüğü anlamına gelmez .
cpast

@DeerHunter ===iyi.
Darth Egregious

1
Ortaokullu bir kız ulum vardı: "x, x artı bire nasıl eşit olabilir?" öğrettiğim bir girişte. Bilgisayarların temel tuhaflığıdır: değişkenler doğada mevcut değildir, evrendeki başka hiçbir şeye benzemezler.

1
User251748: Cüzdanım, çok sayıda bozuk para, banknot ve nadiren kağıt parçaları içeren gerçek bir dünya değişkenidir.
gnasher729

Yanıtlar:


14

Wikipedia'ya göre , atama için eşittir kullanımı, 1949'dan 1951'e kadar tasarlanan ve özellikle Fortran tarafından popüler hale getirilen Heinz Rutishauser'ın Superplan diline dayanıyor:

Kötü bir fikir için kötü şöhretli bir örnek, ödevi belirtmek için eşittir işaretinin seçilmesiydi. 1957'de Fortran'a geri döndü ve dil tasarımcılarının orduları tarafından körü körüne kopyalandı. Neden kötü bir fikir? Çünkü, “=” eşitlik için bir karşılaştırma, ya doğru ya da yanlış olan bir yüklemi belirtmek, yüzyıllık bir geleneği devirir. Ancak Fortran bunu, görevlendirmeyi, eşitliğin uygulanmasını kastediyordu. Bu durumda, işlenenler eşit olmayan bir temeldedir: Sol işlenen (değişken), sağ işlenene (bir ifade) eşit yapılır. x = y, y = x ile aynı anlama gelmez.

—Niklaus Wirth, İyi Fikirler, Görünümlü Camdan

Konrad Zuse, Rutishauser'in Superplan'ına ilham veren Plankalkul için eşittir işaretini kullandı , ancak bir derleyici asla tasarlanmadı. Neden eşittir işaretini seçti? Sanırım ona sormalısın.


4
Kesinlikle daha kötü fikirler vardı. Sonuçta, matematik metinleri =hem yüklem olarak hem de değişkenleri tanımlamak için kullanır, örneğin “Let x = 4. Bu işe yarar çünkü matematik notasyonu zorunlu olarak değil, deklaratif olarak anlaşılmalıdır. Fonksiyonel programlama dilleri (örn. ML ailesi) varsayılan olarak değiştirilemeyen değişkenlerdir ve bu nedenle =ikili rolünde sorunsuz olarak kullanmaya devam edebilir . Daha doğrusu =hem operatör hem de letsözdiziminin bir parçasıdır .
amon

2
@ amon: Matematikteki ikili anlam konusunda katılmıyorum. "Let 4 = x", "Let x = 4" kadar geçerlidir.
GELMEKTEDİR

4
@COMEFROM "Let 4 = x", kullanıcı adınızı aldığınız INTERCAL deyimi kadar doğal değildir. "X" daha önce hiç bahsedilmediğinde, "Let x = {bir şey}" veya "x bir {widget} olsun", değerini belirtmeye ek olarak bir değişken sunar ve bu, değişkeni kurallara göre ilk sıraya koyar. Çünkü en azından sezgi açısından, bu sadece "değer eşittir ..." ifadesinden farklı bir şeydir.

3
@delnan "Let x = 4", "Let x ∈ ℤ ve x = 4" için kısaltmadır. Bağlam yeni değişkeni tanıtır ve =o zaman sadece başka bir yerde olduğu gibi bir tahmindir. Bağlama bağlı olarak, "Let x = 4" ifadesinin de "Let x ∈ ℝ ve x = 4" anlamına gelebileceğini unutmayın.
Doval

2
@RobertHarvey Matematiksel yazımdan bahsediyoruz, C programlamasından değil. BAŞLANGIÇ: Daha önce koyduğum kadar net bir kesim olmadığını kabul ediyorum, ancak matematiksel nesir konvansiyonlara dayandığından ve avukatın "4 = x" e izin verebilecek bir spesifikasyon olmadığından, hayır, "let x = 4" kadar geçerli değil . En azından okurları karıştırır ve dolayısıyla nesrinin temel amacını başarısızlığa uğratır .

7

Ama okulda matematik yaptığımda "let x = 123"

yaygın bir ifadeydi. Basic'in ilk sürümleri eşit olandan önce "let" anahtar kelimesinde ısrar etti. Böylece temelde "izin vermek" için yapılan kaynamalar anlaşılır.

Önemli bir sürücü genellikle dikkate alınmamış ama aslında ne yazdığınız zaman çok önemli.

İki uygulanabilir giriş cihazı vardı,

  • Kağıt teldeki küçük delikleri delmek için standart bir teletype makinesi kullanabileceğiniz ve daha sonra bilgisayar tarafından okunabilen "teletype". Bu, büyük ve küçük harfli standart aplphabet artı klavyenizin üst satırındaki karakterlerin çoğunu desteklediği için o kadar da kötü değildi.
  • Delikli kartlar - büyük şirketlerde sıralayıcı, tablo ve yazıcı kullanımı yaygın olduğu için çok sayıda delikli kart makinesi vardı. Bunlar, yalnızca büyük harfli alfabe ve sınırlı sayıda "özel" karakteri ery sınırlı karakter kümesini destekledi.

Teletipler akademik ve askeri dükkanlarda, kart yumruklarında daha ticari dükkanlarda kullanılma eğilimindeydi. Bu nedenle Pascal gibi akademik diller, küçük harf tanımlayıcıları ve atama için ": =" gibi "mantıklı" gösterimleri destekledi. Daha ticari bir kitleye yönelik diller, delikli kartların ana girdi biçimi olacağını varsayarken, Büyük harf yalnızca FORTRAN ve COBOL gibi diller standart bir tuş vuruşunda bulunmayan ":;> <" karakterleri için sınırlı desteğe sahipti.

Bu arada, karşılaştırma ".LT.", ".LE.", ".EQ.", ".GE" kullanılarak yapılan FORTRAN'ın başlangıcında atama için kullanılan bir belirsizlik yoktu. ve ".GT." sözdizimi.


Yine de her türlü görevden let x = 123daha benzer buluyorum assert(x == 123).
AKHolland

1
PS Eğer bilgiçlik alıyorsanız COBOL "MOVE" sözdizimi bilgisayarın gerçekte ne yaptığını en doğru açıklamasıdır. "KOPYA" daha da doğru olsa da.
James Anderson

123 için büyük değerler için @AKHolland.

C ++ hareket kurucularını icat ettiğinden, COBOL'lar “MOVE” çok garip geliyor.
gnasher729

Her zaman LET'in BASIC'te zorunlu kalması gerektiğini düşündüm, çünkü görevlendirmeyi eşitlik testinden ayrı tutacaktır. Bir çeşit COBOL-ish steno. Sorun şu ki, kaynakta başka bir belirteç, zamanın teeeeny küçük PC'lerinde başka bir değerli bayt alacaktı. Böylece düşürdüler.
Chuck Adams
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.