Чому мови програмування почали використовувати = для призначення?


13

У більшості ранніх алгоритмів книг, які <-посилаються на призначення та =посилаються на порівняння. Але на сьогодні єдиними мовами, які не використовуються =для виконання завдань, є Pascal ( :=) та іграшкові мови, такі як COOL . Що призвело до того, що сучасні мови програмування перетворилися =на призначення значень замість математичного значення рівності?


8
Не запускайте мене на роботу ===...
Мисливець на оленів

1
залишається поширеним в роботі алгоритмів; це одне з трьох поширених позначень для призначення при написанні алгоритму (інші бувають :=і =). Тільки тому, що програмісти всі користуються =, не означає, що математики відпали .
cpast

@DeerHunter ===добре.
Дарт Егрегійний

1
У мене середня школа вила: "Як х може дорівнювати х плюс один?" у вступі я викладав. Основна дивність комп’ютерів: змінних не існує в природі, вони на відміну від будь-якої іншої речі у Всесвіті.

1
User251748: Мій гаманець - це змінна величина в реальному світі, що містить безліч монет, банкнот та випадкових шматочків паперу.
gnasher729

Відповіді:


14

Згідно з Вікіпедією , використання рівних для присвоєння датується мовою Суперплана Хайнца Рутішаузера, розробленою з 1949 по 1951 рік, і особливо популяризувала Фортран:

Сумно відомим прикладом поганої ідеї був вибір знаку рівності для позначення призначення. Він повертається до Фортрансу в 1957 році і його сліпо копіюють армії дизайнерів мови. Чому це погана ідея? Тому що це повалює багатовікову традицію, щоб "=" позначало порівняння для рівності, присудок якого є правдивим чи хибним. Але Фортран мав на увазі присвоєння, забезпечення рівності. У цьому випадку операнди перебувають на нерівній основі: лівий операнд (змінна) повинен бути рівний правому операнду (вираз). x = y не означає те саме, що y = x.

—Ніклаус Вірт, хороші ідеї, крізь дзеркало

Конрад Зузе також використав знак рівності для Планкалука , який надихнув Суперплана Рутішаузера, хоча компілятор ніколи не був придуманий для цього. Чому він обрав знак рівності? Я думаю, вам доведеться його запитати.


4
Що ж, звичайно були гірші ідеї. Зрештою, тексти математики використовують =як присудок, так і для визначення змінних, наприклад у "Нехай x = 4. Тоді √ (x - y) дорівнює нулю, якщо y = 4". Це працює тому, що математичні позначення слід розуміти декларативно, а не імперативно. Функціональні мови програмування (наприклад, сімейство ML) за замовчуванням для незмінних змінних, тому можуть =без проблем продовжувати використовувати у своїй подвійній ролі. Або точніше, =це і оператор, і частина letсинтаксису.
амон

2
@amon: Я не згоден з приводу подвійного значення в математиці. "Нехай 4 = х" так само справедливо, як і "Нехай x = 4".
ПРИЙДАЄТЬСЯ

4
@COMEFROM "Нехай 4 = x" є настільки ж неприродним, як і твердження INTERCAL, з якого ви берете своє ім'я користувача. Коли "x" ніколи раніше не згадувалося, "Нехай x = {щось}" або "Нехай x буде {віджет}" вводить змінну на додаток до визначення її значення, і це ставить змінну спочатку за умовою. Саме тому, що, принаймні, з точки зору інтуїції, це різна річ, ніж просто зазначити "значення дорівнює ...".

3
@delnan "Нехай x = 4" - це лише скорочення для "Нехай x ∈ ℤ і x = 4". Контекст вводить нову змінну, а =потім є лише присудком, як і будь-де, де він використовується. Зауважте, що залежно від контексту "Нехай x = 4" також може означати "Нехай x ∈ ℝ і x = 4".
Доваль

2
@RobertHarvey Ми говоримо про математичне написання, а не програмування на C. ПРИЙДАЙТЕ З: Я визнаю, що це не так чітко, як я висловився раніше, але оскільки математична проза заснована на конвенціях, і немає жодної специфікації, яка може адвокатом дозволити "нехай 4 = х", ні, сказане твердження є не настільки справедливий, як "нехай x = 4". Принаймні, це бентежить читачів і, отже, провалює головне призначення прози .

7

Але коли я займався математикою у школі, "нехай x = 123"

було поширеним фразуванням. Ранні версії Basic наполягали на ключовому слові "нехай" перед рівним. Тож розуміється його в основному кипіння, зроблене для "пускання".

Ключовий драйвер, як правило, не вважається, але дуже важливим у той час, що ви насправді ввели.

Існували два можливі пристрої введення,

  • "Телетайп", за допомогою якого ви можете використовувати стандартний телевізійний апарат для пробивання маленьких отворів у паперовій стрічці, який потім міг прочитати комп'ютер. Це було не так вже й погано, оскільки він підтримував стандартний аплфабет у верхньому та нижньому регістрі плюс більшість символів у верхньому рядку вашої клавіатури.
  • Перфоровані картки - було багато машин для перфокартів, що звисали, оскільки використання сортувальників, табуляторів та принтерів було поширеним у великих корпораціях. Вони підтримують алфавіт з обмеженим набором символів для обмеженого числа символів у верхньому регістрі та обмежену кількість "спеціальних" символів.

Телетайпи, як правило, використовувались в академічних та військових магазинах, удари картками у більш комерційних магазинах. Звідси такі академічні мови, як Pascal, підтримують ідентифікатори нижнього регістру та "розумні" позначення типу ": =" для призначення. Мови, орієнтовані на більш комерційну аудиторію, припускали, що перфокарти будуть основною формою введення, отже, лише у верхньому регістрі мови, такі як FORTRAN та COBOL, мають обмежену підтримку символів ":;> <", які були недоступні у стандартному клавіші.

До речі, не було двозначності щодо того, що "=" використовується для призначення на початку FORTRAN, оскільки порівняння проводилося за допомогою ".LT.", ".LE.", ".EQ.", ".GE." та ".GT." синтаксис.


Хоча я вважаю, що let x = 123аналогічне, assert(x == 123)ніж будь-яке завдання, хоча.
AKHolland

1
PS Якщо ви ставитесь педантично, то синтаксис COBOL "POVE" - це найточніший опис того, що насправді робить комп'ютер. Хоча "КОПІЯ" була б ще точнішою.
Джеймс Андерсон

@AKHolland для великих значень 123.

Оскільки C ++ винайшов конструктори рухів, COBOL "POVE" звучить набагато дивніше.
gnasher729

Я завжди вважав, що LET повинен залишатися обов'язковим у BASIC, оскільки це зробить завдання окремо від тестування рівності. Сортування скорочення COBOL-ish. Проблема полягає в тому, що це займе ще один маркер джерела, ще один дорогоцінний байт у маленьких маленьких комп'ютерах того часу. Тож вони його скинули.
Чак Адамс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.