Как развивался обычай использования квадратных скобок для элементов массива?


11

Многие языки программирования используют синтаксис a[i]для ссылки на iый элемент массива, последовательности или вектора a- в частности, C и Pascal (с конца 1960-х и начала 1970-х) делают это. С другой стороны, некоторые более ранние языки, такие как Фортран (1950-х годов), не используют это соглашение. Кроме того, я немного изучил математику, и математики используют квадратные скобки для интервалов и индексы для, ну, в общем, подписки на массивы и матрицы (или регулярные скобки, если массив рассматривается как функция от неотрицательных целых чисел).

Итак, мой вопрос: где / как / в каком контексте были разработаны эти квадратные скобки для подписки на массив и кем?

Примечание. Совсем не вопрос этого вопроса об использовании фигурных скобок в C.



@gnat: Как это обман?
einpoklum

1
Связанный, но не дурак.
бластер

1
второй топ ответ там охватывает историю в квадратных скобках
комнат

1
@ Пол Typo. Вы имеете в виду xkcd.com/163 (домен xkdc зарегистрирован в Китае)
1201ProgramAlarm

Ответы:


10

Основным языком-предшественником Си и Паскаля был алгол . Самой ранней версией этого был Algol 58, который использовал квадратные скобки для объявлений и ссылок на массивы.

Причина, по которой Алгол использовал квадратные скобки, а не, например, круглые скобки, была трехкратной:

  1. потому что они могли. Ранние клавиатуры IBM, с которыми был разработан Fortran, имели только круглые скобки. Это изменилось к тому времени, когда Алгол уточнялся.
  2. опыт работы с Fortran показал, что программистов часто путают с чрезмерным использованием скобок, поэтому это считается важным синтаксическим изменением.
  3. Цель Algol заключалась в том, что он будет использоваться для описания алгоритмов, поэтому имеет смысл приблизить его к стандартным математическим обозначениям.

Обратите внимание, что в отличие от C, который использует массивы главным образом для индексирования памяти, Algol позволяет указывать как нижнюю, так и верхнюю границы индекса. Опять же, это соответствовало его более математическим намерениям. Настолько, что Алгол был языком де-факто для псевдокода на протяжении многих лет.


Но действительно ли квадратные скобки ближе к стандартным математическим обозначениям? Когда я изучал совпадение, [x]он использовался для классов эквивалентности, а не для обозначения позиций в векторах или матрицах.
einpoklum

2
@einpoklum Больше для диапазонов в объявлении, чем для индексов или индексов в ссылках. Но, поскольку они не могли на самом деле делать подписки или надстрочные индексы с технологией времени, они пошли на визуальную согласованность. И они не стремились к математическому понятию так, как, скажем, APL. Они стремились четко выразить алгоритмы, что является довольно узкой ветвью.
Алекс

О, также, квадратные скобки использовались для интервалов. Я думаю, что это в некотором смысле похоже на диапазоны в массиве. Кроме того - вы уверены, Algol, где этот кастом начался?
einpoklum

@einpoklum Я уверен, что использование квадратных скобок в Си и Паскале произошло от Алгола. Происхождение довольно хорошо задокументировано. Если был предшественник Algol 58, с которого дизайнеры взяли синтаксис, я не знаю об этом. Это вряд ли, учитывая время, но не невозможно. Алгол 58 не был реализован до Алгола 60, поэтому возможно, что неосуществленный язык был источником вдохновения.
Алекс

5

Это интересное чтение: https://en.m.wikipedia.org/wiki/Bracket

Ниже приведены мои собственные наблюдения.

Дизайнеры C очень старались принять значение символов и конструкций, так как они использовались в течение сотен лет на обычном письменном языке. При этом им приходилось работать с довольно ограниченным набором символов ASCII. В западном языке больше символов группировки используется в письменном тексте, но они просто не вошли в ASCII.

На обычном языке значение круглых скобок заключается в предоставлении дополнительной информации без прерывания основного сообщения. Это имеет смысл при вызове процедуры: основное сообщение - это действие, которое нужно выполнить, а подинформация - это аргументы.

Фигурные скобки используются для группировки. «Эта коллекция слов принадлежит друг другу, должны быть отделены от остальных». Поэтому имеет смысл использовать их для блоков кода, составных операторов.

Квадратные скобки используются для вставок в текст, которые не были частью оригинала, чтобы уточнить исходный текст и обеспечить контекст. Или указать на упущение с помощью многоточия: [...]. «Она [королева] не была удивлена». В компьютерном программировании имеет смысл использовать скобку для индексации массива, поскольку это своего рода контекст. «Массив? Какой массив? Ну, конкретно этот элемент». Но даже если первоначальное значение не полностью охватывает использование на компьютерном языке, в ASCII осталось не так уж много других опций.

Поэтому я бы сказал, что это комбинация предшествующего уровня техники и того, что было доступно в то время, что привело к использованию квадратных скобок для индексации массивов.

[редактировать из-за комментария Алекса]

Согласно этому источнику, ASCII был введен в 1963 году и получил одобрение правительства в 1968 году. Согласно этой вики, развитие языка Си началось только в 1969 году . Поэтому вполне вероятно, что г-н Ричи при выборе персонажей следил за этим новым широко поддерживаемым стандартом ASCII.

Пожалуйста, посмотрите также другие ответы, которые подтверждают, что Алгол, «мать многих языков», оказал сильное влияние.


Я думаю, что понимаю то, что вы говорите, но ASCII не кодифицировался в течение почти десяти лет после того, как был разработан C. Гораздо более прямое влияние оказала клавиатура PDP-11, для которой была разработана С. Имеет смысл использовать символы, которые он поддерживает. Использование квадратных скобок для массивов было напрямую связано с Алголом через BCPL и B. Аналогично для Паскаля. Вирт реализовал Algol-W до разработки Паскаля.
Алекс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.